Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Архив Flasher.ru > Программирование > PHP

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 13.06.2004, 20:51
igor82 вне форума Посмотреть профиль Отправить личное сообщение для igor82 Найти все сообщения от igor82
  № 1  
igor82

Регистрация: Apr 2002
Адрес: Россия, Воронеж
Сообщений: 121
Отправить сообщение для igor82 с помощью ICQ Отправить сообщение для igor82 с помощью Yahoo
По умолчанию Сортировка данных в Php+mysql

Народ помогите плз...Вопрос такой....например есть у меня запрос SELECT * FROM table_1 WHERE full_name LIKE '%Vlad%' OR full_name LIKE '%Max%' OR full_name LIKE '%Igor%'

Как мне сделать так чтобы в результирующем наборе были сначала совпадения для Vlad потом для Max а потом уже для Igor...Т.е как сделать чтобы база сортировала результаты именно в той последовательности, которую я задаю после WHERE....

Заранее всем спасибо!

Старый 13.06.2004, 22:08
kompadre вне форума Посмотреть профиль Отправить личное сообщение для kompadre Найти все сообщения от kompadre
  № 2  
kompadre
 
Аватар для kompadre

Регистрация: Aug 2001
Адрес: Barcelona
Сообщений: 1,277
Отправить сообщение для kompadre с помощью ICQ
Для начала чуть-чуть теории: если ты планируешь делать сортировку по определенному полю, ее надо делать не по "частицам" поля а по всему. Разбить твой full_name на имя и фамилию и потом уже сортировать по тому что надо (если я правильно понял твою загвоздку).

Если-же база "выросла" и уже поздно поправлять ее структуру то можно попробывать чтонибудь типа :
Код:
SELECT 
table_1.*, 
full_name LIKE '%Vlad%' as Vlad,
full_name LIKE '%Max%' as Max, 
full_name LIKE '%Igor%' as Igor
FROM table_1 
WHERE full_name LIKE '%Vlad%' OR full_name LIKE '%Max%' OR full_name LIKE '%Igor%'
order by Vlad, Max, Igor, full_name

Старый 13.06.2004, 22:36
Crazy вне форума Посмотреть профиль Отправить личное сообщение для Crazy Посетить домашнюю страницу Crazy Найти все сообщения от Crazy
  № 3  
Crazy
[+1 23.05.11]
 
Аватар для Crazy

Регистрация: 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++

Старый 13.06.2004, 22:58
kompadre вне форума Посмотреть профиль Отправить личное сообщение для kompadre Найти все сообщения от kompadre
  № 4  
kompadre
 
Аватар для kompadre

Регистрация: Aug 2001
Адрес: Barcelona
Сообщений: 1,277
Отправить сообщение для kompadre с помощью ICQ
Цитата:
kompadre, я плакал читая этот запрос.
Ну зачем так? Может конфетку, а? Плакать вредно для глаз.

А теперь (проплакавшись) может-быть расскажешь глупому как упорядочить запрос при помощи case-when-end когда заданный критерий - like '%ххх%'?

Старый 13.06.2004, 23:18
Crazy вне форума Посмотреть профиль Отправить личное сообщение для Crazy Посетить домашнюю страницу Crazy Найти все сообщения от Crazy
  № 5  
Crazy
[+1 23.05.11]
 
Аватар для Crazy

Регистрация: Dec 2001
Сообщений: 4,159
Цитата:
Оригинал написал(а) kompadre
Ну зачем так?
От огорчения.

Цитата:
А теперь (проплакавшись) может-быть расскажешь глупому как упорядочить запрос при помощи case-when-end когда заданный критерий - like '%ххх%'?
Помогать в интеллектуальном развитии -- мой долг:

Код:
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++

Старый 13.06.2004, 23:48
kompadre вне форума Посмотреть профиль Отправить личное сообщение для kompadre Найти все сообщения от kompadre
  № 6  
kompadre
 
Аватар для kompadre

Регистрация: Aug 2001
Адрес: Barcelona
Сообщений: 1,277
Отправить сообщение для kompadre с помощью ICQ
Забавно =)

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 говориш?

Старый 13.06.2004, 23:56
Crazy вне форума Посмотреть профиль Отправить личное сообщение для Crazy Посетить домашнюю страницу Crazy Найти все сообщения от Crazy
  № 7  
Crazy
[+1 23.05.11]
 
Аватар для Crazy

Регистрация: 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++

Старый 14.06.2004, 00:02
kompadre вне форума Посмотреть профиль Отправить личное сообщение для kompadre Найти все сообщения от kompadre
  № 8  
kompadre
 
Аватар для kompadre

Регистрация: Aug 2001
Адрес: Barcelona
Сообщений: 1,277
Отправить сообщение для kompadre с помощью ICQ
Цитата:
Надеюсь, ты не вводил тексты "mysql>", "->" и "Query OK..."?
Нет =))

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

Старый 14.06.2004, 00:56
igor82 вне форума Посмотреть профиль Отправить личное сообщение для igor82 Найти все сообщения от igor82
  № 9  
igor82

Регистрация: Apr 2002
Адрес: Россия, Воронеж
Сообщений: 121
Отправить сообщение для igor82 с помощью ICQ Отправить сообщение для igor82 с помощью Yahoo
Прежде всего всем спасибо за ответы...Но честно говоря я не совсем это имелл ввиду...наверное просто плохо объяснил...Давайте попробую на другом примере:

Допустип пользователь ввел в строку поиска выражение 'игорь гончаров'....Мне нужно чтобы база данных сначала сделала выборку для 'игорь гончаров' - ЦЕЛИКОМ, а потом разбить это выражение на имя и фамилию и чтобы БД искала уже дальше по ОТДЕЛЬНО имени и ОТДЕЛЬНО фамилии...т.е другими словами запрос:

SELECT * FROM table_1 WHERE
(full_name LIKE '%игорь гончаров%') OR
(full_name LIKE '%игорь%' OR full_name LIKE '%гончаров%')

Старый 14.06.2004, 02:07
kompadre вне форума Посмотреть профиль Отправить личное сообщение для kompadre Найти все сообщения от kompadre
  № 10  
kompadre
 
Аватар для kompadre

Регистрация: Aug 2001
Адрес: Barcelona
Сообщений: 1,277
Отправить сообщение для kompadre с помощью ICQ
Ты сам себе ответил =)

Создать новую тему   Часовой пояс GMT +4, время: 19:38.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 19:38.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.