2013-04-14 124 views
1

我有以下SQL查詢。我如何按重複次數排序,然後在MySQL中按日期排序?

SELECT p.`id`, p.`data`, p.`title`, p.`creation_date`, t.`name` AS 'tag' 

    FROM `post_tag` pt, `post` p, `tag` t 

    WHERE p.`id` = pt.`post` 
     AND pt.`tag` = t.`id` 
     AND p.`author` <> '1' 
     AND (t.`name` = 'Programming' 
      OR t.`name` = 'Photography' 
      OR t.`name` = '[...]') 

    ORDER BY p.`creation_date`, t.`name` DESC 

而我得到的表是這樣的:

sql result

正如我在截圖中已經強調,ID爲76和77行是重複的。在我的申請案例中,這是衡量「流行度」。我希望能夠到:

    其中「數據」被重複成一排(我知道我可以用GROUP BY做到這一點)
  1. 令行的「人氣」,然後再通過
  2. 集團行「創建日期」。所以,如果有3行與相同的「數據」時,我想,要先返回,接着排,計數2,等等
+0

'GROUP BY數據ORDER BY COUNT( id)DESC,p.creation_date,t.name DESC'應該可以工作 – Vatev

+0

你的意思是按照creation_date的順序是什麼,因爲流行的數據會有多個?您可以按min(p.creation_date)或max(p.creation_date)進行排序。 – ysth

+0

@ysth好點!我認爲在這種情況下按MIN(p.creation_date)排序會更好。 – Redandwhite

回答

1
... group by p.data order by count(*) desc, p.creation_date, t.name desc 
+1

您可能希望使用'MIN(p.creation_date)'獲取確定性日期,以便每個url具有單獨的時間戳。 –

+0

非常感謝你們倆。我可以在3分鐘內接受。 – Redandwhite

+0

順便說一下,爲什麼count(*)在這裏工作? – Redandwhite