获得最多标记的帖子

时间:2014-07-15 18:46:45

标签: php mysql sql database

所以我想为我的帖子系统找到发布最多的主题标签。所以这就是我的posts表格的样子

+--------------+------------------+------+-----+---------+----------------+
| Field        | Type             | Null | Key | Default | Extra          |
+--------------+------------------+------+-----+---------+----------------+
| id           | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
| post_user    | varchar(255)     | NO   |     |         |                |
| post_ip      | varchar(255)     | NO   |     |         |                |
| post_date    | varchar(255)     | NO   |     |         |                |
| post_content | varchar(40)      | NO   |     |         |                |
| post_likes   | varchar(255)     | YES  |     | NULL    |                |
| hashtag      | varchar(255)     | YES  |     | NULL    |                |
+--------------+------------------+------+-----+---------+----------------+

现在我想查询并找到最常用的hashtag。所以如果我有两个带有#{1}}标签的帖子,它会返回猫的数量,即cats。然后我按降序排序。所以猫是2,狗是2。所以基本上主要的问题是如何获得最“标记”的标签。

1 个答案:

答案 0 :(得分:4)

您的SQL看起来像:

SELECT count(hashtag) as c, hashtag FROM posts WHERE hashtag IS NOT NULL GROUP BY hashtag ORDER BY c DESC

这将返回主题标签列表,按大多数使用排序。响应将有两列:c,标签计数和标签本身。

如果您只想要最常用的标签:

SELECT count(hashtag) as c, hashtag FROM posts WHERE hashtag IS NOT NULL GROUP BY hashtag ORDER BY c DESC LIMIT 1

此表格设计将您限制为每个帖子一个#标签。如果您希望允许帖子有多个主题标签,则需要更多表格。 Hashtags和帖子具有多对多关系:帖子可以有很多标签,标签可以用在很多帖子中。要对此进行建模,您需要一个用于标签的表,以及一个连接帖子和标签的表。 hashtag表可以只有一个ID列和一个标记列。联结表将具有post id列和标记ID列。要将标记与post关联,请在联结表中添加一行以引用标记和帖子。然后,您可以从posts表中删除hashtag列。