![]() |
|
||||||||||
|
|||||
|
Народ помогите плз...Вопрос такой....например есть у меня запрос SELECT * FROM table_1 WHERE full_name LIKE '%Vlad%' OR full_name LIKE '%Max%' OR full_name LIKE '%Igor%'
Как мне сделать так чтобы в результирующем наборе были сначала совпадения для Vlad потом для Max а потом уже для Igor...Т.е как сделать чтобы база сортировала результаты именно в той последовательности, которую я задаю после WHERE.... Заранее всем спасибо! |
|
|||||
|
Для начала чуть-чуть теории: если ты планируешь делать сортировку по определенному полю, ее надо делать не по "частицам" поля а по всему. Разбить твой full_name на имя и фамилию и потом уже сортировать по тому что надо (если я правильно понял твою загвоздку).
Если-же база "выросла" и уже поздно поправлять ее структуру то можно попробывать чтонибудь типа : |
|
|||||
|
[+1 23.05.11]
Регистрация: Dec 2001
Сообщений: 4,159
|
kompadre, я плакал читая этот запрос.
To igor82: .... order by case full_name when 'Vlad' then 1 when 'Max' then 2 ... end
__________________
GIT d++ s++:++ a C++$ UB++ P++ L+ E+ W+++ N++ w++ O+ M V- t-- 5-- X+ R+++ tv- b+++ D++ |
|
|||||
|
Цитата:
А теперь (проплакавшись) может-быть расскажешь глупому как упорядочить запрос при помощи case-when-end когда заданный критерий - like '%ххх%'? |
|
|||||
|
[+1 23.05.11]
Регистрация: Dec 2001
Сообщений: 4,159
|
Цитата:
Цитата:
![]() mysql> create table stupid_guys ( name varchar(100) );
Query OK, 0 rows affected (0.05 sec)
mysql> insert into stupid_guys values( 'Vlad' );
Query OK, 1 row affected (0.05 sec)
mysql> insert into stupid_guys values( 'Max' );
Query OK, 1 row affected (0.00 sec)
mysql> insert into stupid_guys values( 'Igor' );
Query OK, 1 row affected (0.00 sec)
mysql> select * from stupid_guys order by
-> case when name like '%Vlad%' then 1
-> when name like '%Max%' then 2
-> when name like '%Igor%' then 3
-> else 4 end;
+------+
| name |
+------+
| Vlad |
| Max |
| Igor |
+------+
3 rows in set (0.09 sec)
__________________
GIT d++ s++:++ a C++$ UB++ P++ L+ E+ W+++ N++ w++ O+ M V- t-- 5-- X+ R+++ tv- b+++ D++ |
|
|||||
|
Забавно =)
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'like '%Vlad%' then 1 end' at line 1 У тебя какая MySQL server version говориш? |
|
|||||
|
[+1 23.05.11]
Регистрация: Dec 2001
Сообщений: 4,159
|
Скриншот сделан по 3.23.52. Какая версия ругается у тебя?
Надеюсь, ты не вводил тексты "mysql>", "->" и "Query OK..."? ![]()
__________________
GIT d++ s++:++ a C++$ UB++ P++ L+ E+ W+++ N++ w++ O+ M V- t-- 5-- X+ R+++ tv- b+++ D++ |
|
|||||
|
Цитата:
root@srv:~# mysql test -u root -p Your MySQL connection id is 24 to server version: 4.0.15a mysql> select * from stupid_guys; +---------+ | name | +---------+ | Vlad B. | | Max V. | | Igor D. | +---------+ 3 rows in set (0.00 sec) mysql> select * from stupid_guys order by -> case when name like '%Vlad%' then 1 -> when name like '%Max%' then 2 -> when name like '%Igor%' then 3 -> else 4 end; ERROR 1064: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '4 end' at line 4 |
|
|||||
|
Прежде всего всем спасибо за ответы...Но честно говоря я не совсем это имелл ввиду...наверное просто плохо объяснил...Давайте попробую на другом примере:
Допустип пользователь ввел в строку поиска выражение 'игорь гончаров'....Мне нужно чтобы база данных сначала сделала выборку для 'игорь гончаров' - ЦЕЛИКОМ, а потом разбить это выражение на имя и фамилию и чтобы БД искала уже дальше по ОТДЕЛЬНО имени и ОТДЕЛЬНО фамилии...т.е другими словами запрос: SELECT * FROM table_1 WHERE (full_name LIKE '%игорь гончаров%') OR (full_name LIKE '%игорь%' OR full_name LIKE '%гончаров%') |
|
|||||
|
Ты сам себе ответил =)
|
![]() |
Часовой пояс GMT +4, время: 03:26. |
|
|
« Предыдущая тема | Следующая тема » |
|
|