Запрос GROUP BY игнорирует предложение ORDER BY - PullRequest
5 голосов
/ 23 февраля 2011
SELECT
    deal_woot.*,
    site.woot_off,
    site.name AS site_name
FROM deal_woot
INNER JOIN site ON site.id = site_id
WHERE site_id IN (2, 3, 4, 5, 6)
GROUP BY site_id
ORDER BY deal_woot.id DESC
LIMIT 5

Я бы хотел заказать перед группировкой, как мне это сделать?

Ответы [ 4 ]

1 голос
/ 23 февраля 2011

С подзапросом вроде: SELECT *,COUNT(*) FROM (SELECT * from actions order by date DESC) AS actions GROUP BY ip;

0 голосов
/ 23 февраля 2011

Вы выполняете GROUP BY на site_id, и вы размещаете свои записи на deal_woot.id.

Даже если вы делаете Order By до Group, вывод останется прежним.

Есть ли у васлюбое конкретное требование делать что-либо, поскольку сомнение, которое у вас есть, не имеет ничего общего с Орденом по и сгруппированным по.

0 голосов
/ 23 февраля 2011
SELECT
     deal_woot.*,
     site.woot_off,
     site.name AS site_name 
FROM deal_woot 
INNER JOIN site ON site.id = site_id 
WHERE site_id IN (2, 3, 4, 5, 6) 
GROUP BY deal_woot.id DESC, site_id 
LIMIT 5

Я предполагаю, что deal_woot.id уникален тем, что группировка будет основана на site_id

0 голосов
/ 23 февраля 2011

Поскольку вы группируете по site_id, будет возвращена только строка 1 deal_woot.Попробуйте упорядочить по MAX(), что будет возвращать наибольшее значение id для каждого site_id.

SELECT
    deal_woot.*,
    site.woot_off,
    site.name AS site_name
FROM deal_woot
INNER JOIN site ON site.id = site_id
WHERE site_id IN (2, 3, 4, 5, 6)
GROUP BY site_id
ORDER BY MAX(deal_woot.id) DESC
LIMIT 5

Примечание. Поскольку строка UB будет возвращать deal_woot, это будет UB, попробуйте разбить запрос:

SELECT
    deal_woot.*,
    site.woot_off,
    site.name AS site_name
FROM site JOIN (
    SELECT site_id, MAX(deal_woot.id) MaxID
    FROM deal_woot
    WHERE site_id IN (2, 3, 4, 5, 6)
    GROUP BY site_id
  ) sg ON site.id = sg.site_id
  JOIN deal_woot
    ON site.id = deal_woot.site_id AND deal_woot.id = sg.MaxID
ORDER BY sg.MaxID DESC
LIMIT 5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...