Mysql 如何根据数量对行进行排序?

Mysql 如何根据数量对行进行排序?,mysql,sql,sql-order-by,Mysql,Sql,Sql Order By,我的问题是: SELECT posts.id, posts.title, posts.body, posts.keywords FROM posts INNER JOIN pivot ON pivot.post_id = posts.id INNER JOIN tags ON tags.id = pivot.tag_id WHERE tags.name IN ('html', 'php') GROUP BY posts.id 它选择所有带有php或html标

我的问题是:

SELECT     posts.id, posts.title, posts.body, posts.keywords 
FROM       posts
INNER JOIN pivot ON pivot.post_id = posts.id
INNER JOIN tags ON tags.id = pivot.tag_id
WHERE      tags.name IN ('html', 'php')
GROUP BY   posts.id
它选择所有带有
php
html
标记的帖子,或者两者都有。现在我需要向查询中添加
orderby
子句,并根据丰度对结果进行排序。我的意思是,我需要在结果的顶部同时添加
php
html
标记的帖子


我该怎么做?

学习使用表别名。它使查询更易于编写和读取。但是,您只需要一个适当的订购人:

SELECT p.id, p.title, p.body, p.keywords 
FROM posts p INNER JOIN
     pivot pi
     ON pi.post_id = p.id INNER JOIN
     tags t
     ON t.id = pi.tag_id
WHERE t.name IN ('html', 'php')
GROUP BY p.id
ORDER BY COUNT(DISTINCT t.name) DESC;

天啊。。你不到两分钟就回答了我的问题。好极了!只有一件事,
t.name
有一个唯一的索引。所以你仍然认为需要
不同的
。这取决于
pivot
是否有重复项。在哪个列上有
pivot
重复项
pivot
pivot(post\u id,tag\u id)
上还有一个唯一的索引。。!仍然需要
独立的
吗?@MartinAJ。这样就不需要
不同的