Forum Webscript.Ru

Общие => Базы данных => Тема начата: Гость от 13 Сентября 2002, 15:17:08

Название: сортировка выборки
Отправлено: Гость от 13 Сентября 2002, 15:17:08
Видно для профи достаточно взгляда.
Я же смотрю, как баран на ограду.

Имеем что-то типа Select id, value1, value2 from table order by value1 limit 0,10

, то есть выбрали 10 записей с наибольшим значением value1. А вот теперь надо бы одним махом эту выборку отсортировать по значению value2.
Название: сортировка выборки
Отправлено: Гость от 13 Сентября 2002, 15:18:53
Забыл упомянуть. Речь идет о MySQL
Название: сортировка выборки
Отправлено: ThE0ReTiC от 13 Сентября 2002, 15:45:27
...ORDER BY value1, value2 LIMIT 0,10
Название: сортировка выборки
Отправлено: Гость от 13 Сентября 2002, 16:55:55
Цитировать
...ORDER BY value1, value2 LIMIT 0,10


да нет - это сортирует по двум критериям одновременно
попробую пример

----------------------------
ID  |  value1 | value2 |
----------------------------
1    |       b   |      10  |
2    |       c    |      40  |
3    |       d   |      20  |
4    |       a   |      20  |

Идея - сначала
Select id, value1, value2 from table order by value1 limit 0,3

вывод уже не содежит записи с d=3 !
И вот его то м надо отсортировать по value2

то есть вывод должен быть
----------------------------
ID  |  value1 | value2 |
----------------------------
1    |       b   |      10  |
4    |       a   |      20  |
2    |       c    |      40  |

А вот какой запрос к этому ведет???
Название: сортировка выборки
Отправлено: fidget от 13 Сентября 2002, 17:37:39
Гость
тебе же уже написали
ORDER BY value1, value2 LIMIT 0,10
Название: сортировка выборки
Отправлено: Ленивый гость от 13 Сентября 2002, 17:57:17
Цитировать
тебе же уже написали


Жаль, что ты постишь, не читая.
В вышеприведенном примере ORDER BY value1, value2 LIMIT 0,3
приведет к
4 | a | 20 |
1 | b | 10 |
2 | c | 40 |

а получить надо
1 | b | 10 |
4 | a | 20 |
2 | c | 40 |

Наверняка решалось бы вложенным запросом
что то типа SELECT ( SELECT * from table Order by value1 ) Order by value2  
, но MYSQL их не поддерживает. Потому и спрашиваю профсовет.
Название: сортировка выборки
Отправлено: NeoNox от 13 Сентября 2002, 18:08:24
Как вариант временная таблица.
А средствами языка а не MySQL нельзя вторую сортировку провести?
Название: сортировка выборки
Отправлено: Maniac от 13 Сентября 2002, 18:37:37
Согласен с NeoNox
Дергани всю выборку в массив, а затем отсортирую по полю \'value\'
Название: сортировка выборки
Отправлено: fidget от 13 Сентября 2002, 18:49:51
Ленивый гость
я всегда читаю перед тем как пощу :) но я прочитала то, что ты написал словами :) (там не где не говорилось, что сортировка по value1 уже может нарушиться ;) ), а вот твой пример действительно прохлопала :)

Цитировать
SELECT ( SELECT * from table Order by value1 ) Order by value2
, но MYSQL их не поддерживает.


хм .. я не уверена, но боюсь такую конструкцию не поддерживает не только MySQL , но и SQL-99, по крайней мере после быстрого просмотра стандарта я там такого не нашла.

Думаю тебе лучше это реализовать как предложил Nox - с помощью средств языка.
Название: сортировка выборки
Отправлено: rembo от 13 Сентября 2002, 19:26:19
Цитировать
Дергани всю выборку в массив, а затем

Не согласен, для достаточно больших массивов данных и всяких заморочек с кодовыми таблицами такой метод не подойдет. Видимо придется тебе всетаки с мускулом помучиться: если поля по которым ты сортируешь не целочисленные то проиндексуй и тому подобное.
В противном случае если массивы коротенькие и сортировать надо цифры или буквы латинницы то метод NeoNox-a не повлияет на производительность.