Автор Тема: сортировка выборки  (Прочитано 3249 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Гость

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

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

, то есть выбрали 10 записей с наибольшим значением value1. А вот теперь надо бы одним махом эту выборку отсортировать по значению value2.

Гость

  • Гость
сортировка выборки
« Ответ #1 : 13 Сентября 2002, 15:18:53 »
Забыл упомянуть. Речь идет о MySQL

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
сортировка выборки
« Ответ #2 : 13 Сентября 2002, 15:45:27 »
...ORDER BY value1, value2 LIMIT 0,10
AS IS...

Гость

  • Гость
сортировка выборки
« Ответ #3 : 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

  • Непоседа
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 607
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
сортировка выборки
« Ответ #4 : 13 Сентября 2002, 17:37:39 »
Гость
тебе же уже написали
ORDER BY value1, value2 LIMIT 0,10
На Машине Тьюринга далеко не уедешь.

Ленивый гость

  • Гость
сортировка выборки
« Ответ #5 : 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

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
сортировка выборки
« Ответ #6 : 13 Сентября 2002, 18:08:24 »
Как вариант временная таблица.
А средствами языка а не MySQL нельзя вторую сортировку провести?
The documentations is your friend

Оффлайн Maniac

  • Ума нет - считай коллега
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 844
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
сортировка выборки
« Ответ #7 : 13 Сентября 2002, 18:37:37 »
Согласен с NeoNox
Дергани всю выборку в массив, а затем отсортирую по полю \'value\'
TANSTAAFL

Оффлайн fidget

  • Непоседа
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 607
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
сортировка выборки
« Ответ #8 : 13 Сентября 2002, 18:49:51 »
Ленивый гость
я всегда читаю перед тем как пощу :) но я прочитала то, что ты написал словами :) (там не где не говорилось, что сортировка по value1 уже может нарушиться ;) ), а вот твой пример действительно прохлопала :)

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


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

Думаю тебе лучше это реализовать как предложил Nox - с помощью средств языка.
На Машине Тьюринга далеко не уедешь.

Оффлайн rembo

  • Больной
  • Постоялец
  • ***
  • Сообщений: 219
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.v4.ru
сортировка выборки
« Ответ #9 : 13 Сентября 2002, 19:26:19 »
Цитировать
Дергани всю выборку в массив, а затем

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

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28