SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 26.11.2008 22:08:54

savage
Участник
Зарегистрирован: 26.11.2008
Сообщений: 1

ORDER BY сортировка по нескольким полям

Приветствую всех! Необходимо осуществить сортировку в SQL запросе по нескольким полям. То есть по по трем итак сортируется:
SELECT * FROM prod ORDER BY saleprice DESC, img DESC, price DESC - вначале распродажные товары, потом товары с изображениями, все оставшиеся по цене.
Нужно сделать так, чтобы товары с изображениями(второе - поле img DESC) сортировались еще и по цене.

Неактивен

 

#2 26.11.2008 22:25:19

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: ORDER BY сортировка по нескольким полям

SELECT * FROM prod ORDER BY saleprice DESC, IF(img,1,0) DESC, price DESC

Неактивен

 

#3 23.05.2012 17:56:28

in9emix
Завсегдатай
Зарегистрирован: 20.04.2012
Сообщений: 37

Re: ORDER BY сортировка по нескольким полям

Добрый вечер всем. у меня вообще ситуация трудная, объяснить даже сложно, в общем попробую.
У меня есть 4 таблицы в бд. 1 и 2 одинаковые между собой, но отличаются от 3 и 4. И так же 3 и 4 одинаковые между собой и отличаются от 1 и 2.

Сначала я делаю запрос на выборку нужных мне данных методом SELECT с использованием UNION по 1 и 2 таблицам.

Потом получаю нужные данные (например id и numbers) и уже делаю следующий запрос так же с использованием UNION только уже к 3 и 4 таблицам по полученным мною данным ( речь идет о id и numbers ).

Всё...вытащил данные из 3 и 4 таблицы по id и numbers предварительно их сортируя по id и numbers для того что бы товары новые были всегда сверху...и что я вижу....
7
6
3
2
1
4
5

Я не могу понять как такое может быть. По идее так получается только в том случае если бы у меня была не 1 таблица в php файле а 2. Тогда я бы еще мог предположить что они конфликтуют между собой и тут точно нужен UNION...ну ...как же так.. Даже и он не помог, и сортировку делал так ORDER by id DESC, numbers DESC.

И кстати заметил изменения когда сортирую не в 3 и 4 таблице, а когда еще и 1 и 2...тогда расположение меняется, но опять же не так как хотелось ... мне нужно что б было так:

10
9
8
7
6
5
4
3
2
1
естественно методом DESC

Подскажите пожалуйста...

Отредактированно in9emix (23.05.2012 17:56:45)


Труднее всего заработать первый миллион долларов. Аристотель Онассис

Неактивен

 

#4 23.05.2012 18:38:38

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: ORDER BY сортировка по нескольким полям

Хм.
select id from t_1018_1 union select id from t_1018_2 order by id desc;
Даёт корректный результат, отсортированный по id по убыванию.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 24.05.2012 09:41:51

in9emix
Завсегдатай
Зарегистрирован: 20.04.2012
Сообщений: 37

Re: ORDER BY сортировка по нескольким полям

К сожалению не получается так. Они сортируются, но ведут себя как будто у меня в .php страничке 2 таблицы  а не одна.
Когда ставлю сортировку по 1ой и 2ой таблице то выглядит так:

6
5
4
1
2
3

Когда не трогаю 1ую и 2ую и сортирую только 3ую и 4ую, выглядит так:

4
5
6
3
2
1

А когда сортирую как вы предложили то они как будто перемешиваются. получается так:

4
3
6
5
2
1

Я не знаю что делать, по логике все должно же ведь работать...


Труднее всего заработать первый миллион долларов. Аристотель Онассис

Неактивен

 

#6 24.05.2012 09:44:26

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: ORDER BY сортировка по нескольким полям

Приводите непосредственно запросы, которые пишете, тогда легче будет понять в чем проблема.

А когда сортирую как вы предложили то они как будто перемешиваются. получается так:

Приведите дампы таблиц, Ваш запрос, желаемый результат и получившийся результат.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#7 24.05.2012 13:22:31

in9emix
Завсегдатай
Зарегистрирован: 20.04.2012
Сообщений: 37

Re: ORDER BY сортировка по нескольким полям

Я упростил запрос до 1 таблицы что бы вам легче было разобраться. Дальше сам смогу, мне главное эту проблему решить. И так:
Есть таблица в бд friends123 которая хранит в себе список подружившихся пользователей.

Если посмотреть на скриншоте ниже то можно увидить что слева пользователи которые предложили дружбу, а справа те кто принял её.
А данном случае я пользователь vika предложил дружбу 3ем людям (sasha, lera, dima).

http://s019.radikal.ru/i642/1205/c9/cae0782bf2c2.png

И выводиться всё это таким образом:

http://s019.radikal.ru/i642/1205/88/b513c9563389.png

И вот дальше идет сложность, как только мои друзья (sasha, lera или dima) добавят к себе кого нибудь в друзья, происходит вот что:

http://s014.radikal.ru/i326/1205/5b/bba95385379c.png

Тем временем в таблице все нормально:

http://s019.radikal.ru/i623/1205/5f/01068da2b10c.png

Далее та же проблема, решил для примера показать следующее:

http://s52.radikal.ru/i137/1205/17/6acb4f033531.png

http://s018.radikal.ru/i511/1205/1a/420d7ef47808.png

И вот сам код:

$result3 = mysql_query("SELECT * FROM friends123 WHERE i_id='".$_SESSION['id']."' ORDER by id DESC",$db);
$myrow3 = mysql_fetch_array($result3);

do {
$result4 = mysql_query("SELECT * FROM friends123 WHERE my_friend_id='$myrow3[my_friend_id]' ORDER by id DESC",$db); 
$myrow4 =  mysql_fetch_array($result4);

do { echo "Нумерация: $myrow4[id] Пользователь $myrow4[i_am] предложил дружбу пользователю $myrow3[my_friend]<br>"; }
while ($myrow4 =  mysql_fetch_array($result4));

   }
while ($myrow3 =  mysql_fetch_array($result3));

И структура:

http://s014.radikal.ru/i327/1205/7e/3145cbbe47e6.png


И что только уже не делал, сортировки в обратном порядке я не добился...

Отредактированно in9emix (24.05.2012 13:24:36)


Труднее всего заработать первый миллион долларов. Аристотель Онассис

Неактивен

 

#8 25.05.2012 09:52:02

in9emix
Завсегдатай
Зарегистрирован: 20.04.2012
Сообщений: 37

Re: ORDER BY сортировка по нескольким полям

deadka, вы не нашли в чем проблема?


Труднее всего заработать первый миллион долларов. Аристотель Онассис

Неактивен

 

#9 25.05.2012 11:10:41

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: ORDER BY сортировка по нескольким полям

Ваша проблема ИМХО не с  MySQL. Вы не привели запрос, который возвращает некорректный с Вашей точки зрения результат, так что мне трудно даже что-то подсказать. Абстрагируйтесь временно от php, тогда будет проще.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#10 11.06.2012 06:37:19

in9emix
Завсегдатай
Зарегистрирован: 20.04.2012
Сообщений: 37

Re: ORDER BY сортировка по нескольким полям

Разобрался ^^


Труднее всего заработать первый миллион долларов. Аристотель Онассис

Неактивен

 

Board footer

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