В настоящее время я занят реализацией фильтра, для которого мне нужно создать кластер INNER JOIN для каждого "тега" для фильтрации.
Проблема в том, что после целой группы SQL у меня есть таблица, содержащая всю необходимую мне информацию, но мне нужно ее снова для каждого созданного INNER JOIN
В основном это выглядит так:
SELECT
*
FROM search
INNER JOIN search f1 ON f1.baseID = search.baseID AND f1.condition = condition1
INNER JOIN search f2 ON f2.baseID = search.baseID AND f2.condition = condition2
...
INNER JOIN search fN ON fN.baseID = search.baseID AND fN.condition = conditionN
Это работает, но я бы предпочел бы, чтобы таблица поиска была временной (она может быть на несколько порядков меньше, если она не является обычной таблицей), но это вызывает у меня очень неприятную ошибку: Can't reopen table
Некоторые исследования приводят меня к этому отчету об ошибках, но люди в MySQL, похоже, не заботятся о том, чтобы такая базовая функция (с использованием таблица более одного раза) не работает с временными таблицами. Я столкнулся с множеством проблем с масштабируемостью с этой проблемой.
Есть ли какое-нибудь жизнеспособное обходное решение, которое не требует от меня управления потенциально большим количеством временных, но очень реальных таблиц, или заставить меня поддерживать огромную таблицу со всеми данными в ней?
С уважением, Крис
[дополнительный]
Ответ GROUP_CONCAT не работает в моей ситуации, потому что мои условия - это несколько столбцов в определенном порядке, это сделает ORs из того, что мне нужно для AND. Тем не менее, это помогло мне решить более раннюю проблему, поэтому теперь таблица, темп или нет, больше не требуется. Мы просто думали слишком общие для нашей проблемы. Теперь все применение фильтров было возвращено примерно через минуту, чтобы пройти через четверть секунды.