Поиск по базе mysql
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Поиск по базе mysql Expand / Collapse
Автор
Сообщение
27.09.2006 10:22
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 18.10.2006 15:29
Сообщ.: 42, Visits: 358
Здравствуйте!

Подскажите, пожалуйста, как  реализовать следующее.

Есть 3 поля в таблице: name (VARCHAR), desc_small(TEXT), description(TEXT).

Например, я ищу слово WORD.

Как сделать так, чтобы результаты выдавались так:

1. Сначала WORD в начале name.

2. Далее WORD в середине и конце name.

3.WORD в начале desc_small.

4.WORD в середине и конце desc_small.

5.WORD в начале description.

6.WORD в середине и конце description.

Сообщ. #904920
27.09.2006 10:33
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
[Вопрос перенесен их форума PHP в форум MySQL]

Это можно решить с помощью оператора UNION.

SELECT name, desc_small, description WHERE name LIKE 'WORD%'
UNION
SELECT name, desc_small, description WHERE name LIKE '%WORD%'
UNION
SELECT name, desc_small, description WHERE desc_small LIKE 'WORD%'
...

Сообщ. #904922
27.09.2006 22:09
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 18.10.2006 15:29
Сообщ.: 42, Visits: 358
А повторяющиеся результаты будут исключаться?

Т.е. если в двух запросах некоторые результаты повторялись, то повторы исключатся?

Я сделал пока в одном месте так - вроде, работает, а в основном поисковом скрипте не решаюсь так делать - боюсь будет много ресурсов будет брать, т.к. запросов выходит много.

Сообщ. #905000
28.09.2006 9:56
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Повторы исключаться не будут. Надо или делать группировку (GROUP BY) по ключевому полю таблицы, если оно есть, или явно исключать повторы:

SELECT name, desc_small, description WHERE name LIKE 'WORD%'
UNION
SELECT name, desc_small, description WHERE name LIKE '%WORD%'
UNION
SELECT name, desc_small, description WHERE desc_small LIKE 'WORD%' AND name NOT LIKE '%WORD%'
UNION
SELECT name, desc_small, description WHERE desc_small LIKE '%WORD%' AND name NOT LIKE '%WORD%'
...

Сообщ. #905006
28.09.2006 13:53
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 18.10.2006 15:29
Сообщ.: 42, Visits: 358
А здесь:

bazile (28.09.2006)
SELECT name, desc_small, description WHERE name LIKE 'WORD%'
UNION
SELECT name, desc_small, description WHERE name LIKE '%WORD%'

разве не будет повторов?

Это '%WORD% означает, что в начале и в конце что угодно, даже отсутствие символов?

Значит здесь тоже нужно исключить повторы?

Сообщ. #905031
28.09.2006 14:22
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Будут. Запишем тогда так условие отбора

SELECT name, desc_small, description WHERE name LIKE 'WORD%'
UNION
SELECT name, desc_small, description WHERE name LIKE '_%WORD%'

Сообщ. #905036
28.09.2006 18:23
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 18.10.2006 15:29
Сообщ.: 42, Visits: 358
Спасибо, кажется, работает, буду дальше тестировать.
Сообщ. #905055
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl

Время GMT +3:00, Сейчас 6:07