SQL — Выберите записи, в которых столбцы содержат ключевое слово и имеют ту же категорию

#mysql #sql

#mysql #sql

Вопрос:

Я работаю над панелью поиска. У меня есть два поля category и input. Если пользователь вводит запрос и не выбирает категорию

Я хочу получить все записи, соответствующие ключевому слову. Я сделал это, и это работает отлично.

Теперь, если пользователь выберет категорию с ключевым словом. Я хочу получить записи, в которых категория является выбранной пользователем категорией.

 SELECT uid, title, posted FROM mytable WHERE title LIKE '%anna%' OR tags LIKE '%anna%' AND categories LIKE '3d29d6fdaf670c8df35b630e' AND status = 'active' ORDER BY id DESC
 

Приведенный выше запрос не возвращает записи с той же категорией.

У меня есть столбец категорий в mytable, и может быть несколько категорий

 3d29d6fdaf670c8df35b630e, bd414a2c5860e6cba1794040ef46fdcb
 

вот так

Как я могу это сделать?

Ответ №1:

Здесь необходимо правильно использовать круглые скобки, чтобы получить правильный логический порядок, который вы намереваетесь:

 SELECT uid, title, posted
FROM mytable
WHERE
    (title LIKE '%anna%' OR tags LIKE '%anna%') AND
    categories LIKE '3d29d6fdaf670c8df35b630e' AND
    status = 'active'
ORDER BY id DESC;
 

Версия, которая у вас была, фактически использовала это WHERE предложение:

 WHERE
    title LIKE '%anna%' OR
    (tags LIKE '%anna%' AND
    categories LIKE '3d29d6fdaf670c8df35b630e' AND
    status = 'active')
 

Комментарии:

1. Большое спасибо за объяснение и помощь 🙂