Форум SAPE.RU

Форум SAPE.RU (http://forum.sape.ru/index.php)
-   Разработка и сопровождение сайтов (http://forum.sape.ru/forumdisplay.php?f=29)
-   -   Вопрос к знатокам SQL (http://forum.sape.ru/showthread.php?t=76114)

VAU 11.12.2011 16:28

Вопрос к знатокам SQL
 
Есть запрос такого вида:
Цитата:

SELECT TOP (20) a.x
FROM b INNER JOIN a
ON b.y = a.x
GROUP BY a.x
ORDER BY COUNT(b.y) DESC
Т.е. происходит выборка 20 значений а из таблицы x, наиболее часто встречающихся в связанной таблице b в виде значения y.

Вопрос следующий: как теперь отсортировать список по значениям a?

Сортировка в запросе уже применяется (по сумме) и соответственно не дает нормально сделать вторую.
Как вариант возможен вложенный запрос SELECT, но может есть какой-то более эффективный способ?

Заранее благодарен!

Последний Герой 11.12.2011 17:13

Цитата:

Сообщение от VAU (Сообщение 1181383)
Как вариант возможен вложенный запрос SELECT, но может есть какой-то более эффективный способ?

без двух сортировок не обойтись. первым запросом сортируем по COUNT(b.y) в обратном порядке и берем 20 первых записей, затем вторым запросом сортируем результат.

Добавлено через 12 минут
должно получиться что-то вида
Код:

SELECT a.x FROM (SELECT TOP (20) a.x, а.нужное FROM b INNER  JOIN a ON b.y = a.x GROUP BY a.x ORDER BY COUNT(b.y) DESC ) ORDER BY нужное

VAU 11.12.2011 17:53

Цитата:

Сообщение от Последний Герой (Сообщение 1181395)
должно получиться что-то вида

ОК. Так и сделал. Спасибо!

boric 14.12.2011 15:43

VAU, А я бы возможно на стороне клиента полученную выборку из всего 20 значений отсортировал. В данном случае запрос по любому достаточно простой, но бывает народ очень сильно усложняет запрос вместо того, чтобы допилить результат на стороне скрипта.

Последний Герой 14.12.2011 15:44

Цитата:

Сообщение от boric (Сообщение 1182794)
но бывает народ очень сильно усложняет запрос вместо того

в данном случае нет

kakogohrena 14.12.2011 16:51

А если полученный массив отсортировать средставами пхп, это не будет быстрей?

VAU 14.12.2011 16:57

Цитата:

Сообщение от boric (Сообщение 1182794)
допилить результат на стороне скрипта

Ну пока не так уж много обращений по этому запросу, чтобы раскорячиваться. Просто хотел узнать есть ли неизвестные мне возможности SQL в этом плане.

Последний Герой 14.12.2011 22:58

Цитата:

Сообщение от kakogohrena (Сообщение 1182831)
А если полученный массив отсортировать средставами пхп, это не будет быстрей?

не будет

Alexey 15.12.2011 06:35

ORDER BY допускает несколько сортировок типа ORDER BY f1 ASC, f2 DESC.

Последний Герой 15.12.2011 07:17

Alexey, опять суешься не разобравшись?
Цитата:

Сообщение от Alexey (Сообщение 1183102)
ORDER BY f1 ASC, f2 DESC.

записи с одинаковыми значениями f1 будут отсортированы по f2.

ТСу надо сначала отсортировать по одному полю, затем отобрать топ, затем уже сам этот топ пересортировать по другому.


Часовой пояс GMT +3, время: 09:53.

Работает на vBulletin® версия 3.8.7.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
SAPE.RU — система купли-продажи ссылок с главных и внутренних страниц сайтов.