MySQL нравится и не нравится искать в одном столбце - PullRequest
0 голосов
/ 23 февраля 2012

Привет! Я пишу запросы MySQL для базы данных, которую я не проектировал и не могу изменить на данный момент, и у меня возник вопрос, я не проверял это, поэтому он может работать как задумано, но я не точно.

Таким образом, в таблице, которую я ищу, есть только три столбца: id, title и description, но столбец description на самом деле представляет собой список другой информации, хранимой стандартным способом (это для музыкальных метаданных, поэтому это будет выглядеть примерно так: ):

id | название | описание
1 | stairway_to_heaven | исполнитель = led_zeppelin, жанр = рок, альбом = led_zeppelin_iv

Что я хочу сделать, это написать запрос, который выберет все песни с исполнителем, содержащие строку zeppelin

То, что я изначально придумал, это

"SELECT * FROM table WHERE description LIKE %artist=%zeppelin%"

Хотя я считаю, что это должно работать, если имя присутствует в описании, я считаю, что проблема заключается в сценарии, где я хочу найти всех исполнителей, которые содержат рок, но это выглядело бы следующим образом

"SELECT * FROM table WHERE description LIKE %artist=%rock%"

Мой первый вопрос: это выберет строку, потому что рок в строке после Artist = правильный?

Мой второй вопрос: это решит проблему?

"SELECT * FROM table WHERE description LIKE %artist=%rock% AND WHERE description NOT LIKE %artist=%,%rock%"

Я думал, что если я опущу строки, которые имеют (, разделитель) между Artist = и тегом сравнения, он не выберет вышеуказанную строку. Моя потенциальная проблема заключается в том, что если разделитель указан в имени исполнителя, он потерпит неудачу, но я смогу решить эту проблему, выбрав разделитель, которого нет ни в одном из значений поля, и принудительно установив, что это свойство содержит.

Также извините за любые проблемы с форматированием, это моя первая попытка написать вопрос.

Спасибо, twain249

1 Ответ

1 голос
/ 23 февраля 2012

У вас есть опыт работы с регулярными выражениями? Если да, вы можете использовать их в своем запросе для решения подобных случаев. Смотрите некоторые примеры здесь: http://dev.mysql.com/doc/refman/5.0/en/regexp.html

В качестве альтернативы, вы можете использовать функцию «split», как определено здесь: http://blog.fedecarg.com/2009/02/22/mysql-split-string-function/

...