|
|
|
Forum 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.
|
|
|
|
|
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%' ...
|
|
|
|
|
Forum Member
      
участник
Last Login: 18.10.2006 15:29
Сообщ.: 42,
Visits: 358
|
|
| А повторяющиеся результаты будут исключаться? Т.е. если в двух запросах некоторые результаты повторялись, то повторы исключатся? Я сделал пока в одном месте так - вроде, работает, а в основном поисковом скрипте не решаюсь так делать - боюсь будет много ресурсов будет брать, т.к. запросов выходит много.
|
|
|
|
|
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%' ...
|
|
|
|
|
Forum 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% означает, что в начале и в конце что угодно, даже отсутствие символов? Значит здесь тоже нужно исключить повторы?
|
|
|
|
|
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%'
|
|
|
|
|
Forum Member
      
участник
Last Login: 18.10.2006 15:29
Сообщ.: 42,
Visits: 358
|
|
| Спасибо, кажется, работает, буду дальше тестировать.
|
|
|
|