У меня есть база в которой около 70000 записей - музыка. Каждый трек относится к каким-то определенным жанрам.
Если песню можно отнести только к одному жанру (пусть будет
trance), то для ее поиска я бы написал запрос через php следующего вида:
$result = mysql_query("SELECT * FROM music WHERE genre = 'trance'");
В поле
genre для этого трека есть всего одно слово -
trance, поэтому вроде как вполне быстро можно сделать выборку по всем таким трекам.
А вот если одна и так же композиция относится сразу к нескольким жанрам (пусть будет trance, house, electrohouse), то я пишу вот так:
$result = mysql_query("SELECT * FROM music WHERE genre LIKE '%trance%'");
Так как в поле
genre для этого трека теперь уже 3 слова (trance, house, electrohouse), то приходится делать выборку через
LIKE. Это уже ощутимо грузит сервер.
Как правильно в такой ситуации делать выборки? Я знаю, что есть sphinx, но для меня пока это сложновато. Как можно облегчить работу сервера на данном этапе, какие простйшие рекомендации вы можете дать?
Заранее спасибо!
UPD:
С изначальным вопросом я все понял, всем спасибо!
Теперь еще вопрос:
Если человек вводит запрос вида: "trance and house", то как правильно делать в таком случае выборку, чтобы в результате были выведены все треки, в жанрах которых встречаются слова из этого запроса? В данном случае должны вывестись все треки из жанра house и trance.
$result = mysql_query("SELECT * FROM xref_music WHERE genre_id = 7 OR genre_id = 5");
Цифры 7 и 5 - это соответственно id жанров trance и house.
Т.е. я беру строку trance and house, разбиваю ее по словам. А дальше? Как-нибудь убрать из нее все лишнее (and) и оставить только существующие жанры (house, trance)?
Потом загнать каждый жанр по отдельности в запрос как я показал в своем примере? Это по феншую будет?