Как я могу поставить несколько результатов флажка в предложении WHERE в SQL? - PullRequest
0 голосов
/ 16 октября 2019

Мне нужно написать предложение WHERE для различного числа категорий в моей базе данных. Как мне лучше всего подойти к этому?

Вот что я делаю: я создаю страницу поиска для отображения результатов из моей базы данных событий. Работает нормально, сортирует и фильтрует по моим критериям. Я хочу добавить возможность фильтрации по категориям. Каждое событие в моей таблице может иметь несколько категорий. Я хочу сделать так, чтобы, когда я отмечал эту категорию в форме поиска, в ней отображались элементы только этой категории.

Поэтому я могу поставить галочку в поле «ID категории 24» в форме поиска и фильтрации, и этобудет выводить события, такие как

EVENT: Magic Show
When: Oct 9th, 2:00pm
Categories: 24, 32, 15

, поскольку категория 24 была одной из категорий для этого события.

Сейчас у меня это "работает", принимая каждый результат и выполняя второй SQL-вызовпроверьте, относится ли она к этой категории, которая является ресурсоемкой, но эффективной. Я также получил «лучшую» версию, где она проверяет строку идентификаторов категорий и решает, показывать ли ее. Эффективный, но все еще не правильный код.

Что затрудняет это, так это мои таблицы. У меня есть таблица Events, которая содержит информацию о каждом событии, таблица Categories, в которой перечислены все возможные категории, и одна, называемая EventCategories, которая присваивает каждому eventID идентификатор категории, по одному на строку.

Вот мой SQL:

SELECT 
    e.ID, 
    e.Title, 
    GROUP_CONCAT(c.ID SEPARATOR '  ·  ') as Categories
FROM 
    Events e
    LEFT JOIN EventCategories ec ON ec.EventID = e.ID 
    LEFT JOIN Categories c ON c.ID = ec.CategoryID

WHERE
    ".$cond."
ORDER BY 
    e.Title DESC

Групповой контакт работает так, что, когда я набираю $ row ['Categories'], он отображает что-то вроде 23 · 28 · 26. Это здорово, но мне нужно добавить это в мое предложение WHEREчтобы проверить эти цифры, и вот где я застрял.

Мне нужно сделать это так, чтобы я мог сказать что-то вроде "ГДЕ все события с категорией" 23 "будут отображаться. Я беру категорию из данных POST, но это не проблема, но сложная часть заключается в написании предложения WHERE для различного числа категорий.

Любая помощь будет принята!

...