2013-03-04 63 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語句不是。然而非常好的解決方案。您應該規範化數據庫結構並將標籤提取到單獨的表中。