2013-04-14 94 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