2013-03-04 48 views
-1

获取顶级标签,我有以下表格:从SQL数据库

id tag imgID ts 
1 funny 1 2013-03-03 09:56:56 
1 boring 5 2013-03-03 09:56:56 
1 cute 3 2013-03-03 09:56:56 
1 funny 67 2013-03-03 09:56:56 

对于图像的标签。所以这是我能想到的最好的解决方案,所以当添加标签时,新的线添加到这张桌子上。所以可能有许多相同标签的许多行。我想要做的是在主页上显示十大最常用的标签。因此,如果有很多有趣的标签,而且这是趋势,我希望这是第一。我怎样才能用SQL来做到这一点?

+0

我建议你先通过规范化来改变表结构。我看到很多数据可能是多余的。 'TagTable(Id,TagName)'和'ImageTagMapper(ID,TagTableID,ImageID,TimeSeconds)'然后在表上使用连接并获取前10个结果。 – 2013-03-04 13:09:05

+0

@LearningByCoding我很喜欢,但是你迷惑了我 - 你的意思是tagtable()和imagetagmapper()是什么意思? – Chud37 2013-03-04 13:12:21

+0

@ Chud37他们是表名。我看到你在这里可能只有一张桌子。创建两个单独的表。 [Normal Forms](http://www.trumpetpower.com/Papers/Normal_Forms) – 2013-03-04 13:15:04

回答

2

使用GROUP BY按标记对所有行进行分组,然后按照表格中的频率顺序列出它们。

SELECT tag 
FROM theTable 
GROUP BY tag 
ORDER BY COUNT(*) DESC 
LIMIT 10 
+0

当这里有成千上万的标签时,这会变慢吗? – Chud37 2013-03-04 13:04:48

0

通过分组和计数:

SELECT tag, COUNT(*) occurrences 
FROM  yourtable 
GROUP BY tag 
ORDER BY occurrences DESC 

上做字符串列GROUP BY语句不是。然而非常好的解决方案。您应该规范化数据库结构并将标签提取到单独的表中。