Сложные SQL запрос - не могу понять.

12
Mr_Promoter
На сайте с 06.08.2004
Offline
254
872

SELECT site, SUM(count) FROM `$ipdb` GROUP BY site ORDER BY SUM(count) DESC LIMIT 20;

id ip site count

31 195.189.X.X 18 14

нужно сделать выборку из базы данных (структура выше) что бы был вернут результат в виде 20 сайтов с наибольшей суммой коунта. В базе есть несколько записей с одним и тем же номером сайта и неким количеством count у каждого, но с разными ip. Так вот нужно вывести 20 сайтов с максимальным суммарным count.

В принципе этот запрос

SELECT site, SUM(count) FROM `$ipdb` GROUP BY site;

выводит весь список сайтов с суммарным count

можно ли к результату выборки применить сортировку по убыванию и обрезание первых 20 результатов какой либо функцией? Или полная выгрузка в массив и уже обработка там неизбежна?

Язык PHP если что.

http://webpromote.ru (http://webpromote.ru) - пописываю иногда ...
DI
На сайте с 03.01.2007
Offline
123
#1

А чем самый верхний запрос не подходит? Он ведь и отличается от второго тем, что сортирует и обезает.

Высказывание идиотского утверждения требует на порядок меньше усилий, чем его последовательное и обоснованное опровержение и более того, иногда это опровержение вообще невозможно. © (http://zhurnal.lib.ru/s/shapiro_m_a/raspidiota.shtml)
Gipperion
На сайте с 03.10.2006
Offline
80
#2

Можно, почему бы и нет?

Опыт - это такая штука, которая приходит сразу после того, как была нужна.
Mr_Promoter
На сайте с 06.08.2004
Offline
254
#3
DenIT:
А чем самый верхний запрос не подходит?

Он не работает :)

Нельзя сортировать по функции видимо.

ORDER BY count - работает

а ORDER BY SUM(count) - :( не работает.

Mr_Promoter
На сайте с 06.08.2004
Offline
254
#4
Gipperion:
Можно, почему бы и нет?

И каким образом это сделать?

DI
На сайте с 03.01.2007
Offline
123
#5
Mr_Promoter:
Нельзя сортировать по функции видимо.
ORDER BY count - работает

аа:)

SELECT site, SUM(count) as sumcount FROM `$ipdb` GROUP BY site ORDER BY sumcount DESC LIMIT 20;

Mr_Promoter
На сайте с 06.08.2004
Offline
254
#6

мне нужна сортировка именно по сумме

DI
На сайте с 03.01.2007
Offline
123
#7
Mr_Promoter:
мне нужна сортировка именно по сумме

поправил предыдущее сообщение, чтоб не возникало непоняток:)

Gipperion
На сайте с 03.10.2006
Offline
80
#8

согласен с DenIT, впрочем если у Вас не мощный ресурс по 10-50к посетителей в день, я думаю, что считывание первых 20 строчек из результирующего набора вместо явной сортировки никак не отразится на скорости работы сервера.

DI
На сайте с 03.01.2007
Offline
123
#9

ну, имхо, лучше сразу писать оптимальные решения, потому что если ситуация изменится (увеличится посещаемость, уменьшатся ресурсы и т.п.) - замучаешься вычищать из всех запросов по чуть-чуть, чтобы проект в целом работал чуть быстрее:)

PS: а вообще, в данном случае пофиг - т.к. mysql работает таким образом, что сначала выбирает все записи, соответствующие условию (т.е. полноценный запрос), а LIMIT использует только для вывода. Т.е. экономия получается на обработке массива средствами PHP.

Gipperion
На сайте с 03.10.2006
Offline
80
#10

DenIT, ну да, вопрос как раз к тому и сводится, чтобы сэкономить ресурсы на обработке массива средствами ПХП. Но некоторым сайтам (большинству) уже по определению не стать мегапорталами. И все же,

SELECT site, SUM(count) as sumcount FROM `$ipdb` GROUP BY site ORDER BY sumcount DESC LIMIT 20;

работает ли это?

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий