SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 27.04.2010 18:03:53

Arlevnar
Участник
Зарегистрирован: 27.04.2010
Сообщений: 3

Сложнейшая выборка

Доброго времени суток. Даже и не знаю с чего начать smile
Задача:
Есть массив из трёх элементов в PHP. Требуется произвести поиск совпадающих слов в таблице.
[1] [2] [3] – оставшиеся три слова

Необходимо получить данные из столбца data в переменные, где фраза ответа
из таблицы будет содержать наибольшее кол-во слов:

Ищет вхождение [3]
В полученных результатах ищет вхождение [2]
В полученных ищет вхождение [1]

Если при поиске по слову [3] ничего не было найдено, то:

Ищет вхождение [2]
В полученных ищет вхождение [1]

Если при поиске по слову [2], и ранее [3], ничего не было найдено, то:

Ищет вхождение [1]

Если при поиске по слову [1], и ранее по [2] и [3], ничего не было найдено, то:

Записываем в переменные значение 0

Понимаю сложновато сломал голову. Можно это как нибудь реализовать на MySQL 5.2.

Заранее Спасибо.

Неактивен

 

#2 27.04.2010 18:05:58

Arlevnar
Участник
Зарегистрирован: 27.04.2010
Сообщений: 3

Re: Сложнейшая выборка

Пробовал с помощью блоков IF() в PHP но получается такая каша что этот вариант я вычеркнул сразу.
Может кто знает как реализовать это по проще в MySQL ???

Неактивен

 

#3 27.04.2010 20:18:59

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Сложнейшая выборка

Возможно вам подойдет полнотекстовый поиск?

Неактивен

 

#4 27.04.2010 20:45:47

Arlevnar
Участник
Зарегистрирован: 27.04.2010
Сообщений: 3

Re: Сложнейшая выборка

Спасибо конечно но с английским у меня туго.

Неактивен

 

#5 28.04.2010 04:34:26

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Сложнейшая выборка

Ну, попробуйте подтянуть английский (без иронии, в программировании это бесценно).

И полнотекстовый индекс действительно спасет. Какой-нибудь
ORDER BY MATCH(data) AGAINST ('[3]', '[2]', '[1]') OR
               MATCH(data) AGAINST(['2'],['1']) OR
               MATCH(data) AGAINST('[1]')

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson