|
|
|
| Всем привет, не получается сделать правильный поиск.
Есть три ячейки: artist, song, artsong.
artist - Название исполнителя
song - Название композиции
artsong - исполнитель и композиция
Пример: |Дима Билан|Невозможное возможно|Дима Билан Невозможное возможно|
Как сделать поиск, чтобы:
1) Введя "Дима Билан" или "Билан Дима" - выводились без мусора все "Дима Билан" и "Билан Дима" одновременно.
2) Введя "Билан Дима невозможное", могло найти по строчке из примера "Дима Билан Невозможное возможно", и чтобы вывело только одну композицию, а всех остальных "Биланов" не надо выводить...
p.s. Дошёл до того, что все 3 поля сделал fulltext, но выводит много мусора, и нужную композицию, совпавшую 100% выводит в середине списка...
Что посоветуете? | |
|
|
|
|
|
|
|
для: morkovkin
(26.07.2010 в 07:59)
| | А если попробовать
WHERE MATCH (
`artsong`
)
AGAINST (
'Дима Билан Невозможное возможно'
IN BOOLEAN
MODE
)
|
Вообще-то структура бд неверная
лучше переделать сразу
и поле artsong совсем не нужно | |
|
|
|
|
|
|
|
для: morkovkin
(26.07.2010 в 07:59)
| | Вы в примере кажется 2 раза одно и тоже имя написали.
Что бы выводились и Билан Дима и Дима Билан (если эти слова находятся в 2 поле в 2-х разных строчках (id=1 и id =2)) можно попробовать так:
WHERE MATCH ( `artsong`) AGAINST ('+Дима' IN BOOLEAN MODE );
Или
WHERE MATCH ( `artsong`) AGAINST ('+Билан' IN BOOLEAN MODE );
Т.к. в обеих строчках есть и Дима и Билан. (+ означает, что это слово должно быть в каждой возвращенной строке).
По такому же принципу (с +-ками) можно сделать и 2-ю задачу:
WHERE MATCH ( `artsong`) AGAINST ('+Билан +Дима +невозможное' IN BOOLEAN MODE );
Если даже в какой-то строке кроме этих 3-х слов есть еще какие-то, они тоже будут выведены.
Это если я правильно понял ваш вопрос.
Совет: используйте другую структуру таблиц. Выведите в отдельную таблицу имена всех исполнителей. И еще одну таблицу для названия песен. И 3-ю, для связи 1-й и 2-й. Т.е. в 3-й каждому идентификатору исполнителя будет соответствовать своя песня. И поиск будет намного легче.
И еще: http://www.mysql.ru/docs/man/Fulltext_Search.html | |
|
|
|
|
|
|
|
для: lElectroHardl
(26.07.2010 в 12:55)
| | Выведите в отдельную таблицу имена всех исполнителей.
Однозначно да. И нужно это для того что бы отличить одного исполнителя от другого при совпадающих именах. Так как к примеру "Рваные тапки" из Бобруйска и "Рваные тапки" из Забубёновска - это совершенно разные группы.
сущность - исполнитель
еще одну таблицу для названия песен
тоже да по той же причине. так как у одной и той же песни могут быть несколько исполнителей (и не обязательно это будет дуэт), и две совершенно разные песни могут иметь одинаковые названия.
сущность - песня.
И 3-ю, для связи
связь множество ко множеству
И поиск будет намного легче.
вот под это я не подпишусь :) поиск - это всегда гемор)) | |
|
|
|
|
|
|
|
для: Valick
(26.07.2010 в 13:21)
| | Хотя, да, поиск - ужс какой-то! Я свой, примерно по той схеме которую описал, делал 2 недели(!).
Поясни, что означает "связь множество ко множеству". | |
|
|
|
|
|
|
|
для: lElectroHardl
(26.07.2010 в 14:50)
| | одному исполнителю может соответствовать множество песен
одной песне может соответствовать множество исполнителей | |
|
|
|
|
|
|
|
для: Valick
(26.07.2010 в 14:56)
| | Ух, спасибо народ за советы, пошёл за веревкой и мылом)) | |
|
|
|
|
|
|
|
для: Diplex
(27.07.2010 в 03:15)
| | Стул не забудь ;) | |
|
|
|