2010-06-23 57 views
0

我在我的MySQL數據庫3個表:獲取線程掛標籤

  • 的螺紋表(ID,標題)
  • 的標籤表(ID,姓名)
  • 數據透視表ThreadTags( tagID,threadID)

讓我們來承認我已經有數組$ tagIDs中的標籤ID,現在我想讓所有線程鏈接到所有這些標籤。我目前的解決方案是類似的東西:

$stmt = 'SELECT id, title FROM Threads'."\n"; 

foreach($tagIDs as $id) { 
    $stmt .= 'INNER JOIN ThreadTags T1 ON (T1.threadID = Thread.id AND T1.tagID = '.$id.')'."\n"; 
} 

而且任何數量的標籤添加其他INNER JOIN此表。
有沒有更好的方法?
注意:請像「使用的NoSQL數據庫」沒有回答,我不能改變,得益於

回答

1

我想這可能工作<,我沒有,因爲我沒有測試過,雖然數據庫附近。
這不起作用(見註釋)

sort($tagIDs, SORT_NUMERIC);  
$tagIDs = implode(',', $tagIDs); // This gives you a string '1,2,5,19' 

$stmt = 'SELECT id, title, GROUP_CONCAT(T1.tagID ORDER BY T1.tagid ASC) as threadtags FROM Threads INNER JOIN 
ThreadTags T1 ON T1.threadID 
WHERE threadtags LIKE \'%' . $tagIDs . '%\' 
GROUP BY Threads.id'; 
+0

沒有做我想做的,它會給我掛標籤的至少一個全部線程,我只想鏈接到所有標籤線程(一種高精度在問題中)。 – 2010-06-23 13:22:58

+0

對不起,我看錯了。我可能會這樣做,就像你做的一樣。但是如果你想進一步研究這個,也許你可以看看mysql的GROUP_CONCAT函數:http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group- concat我認爲這是可能的,我會檢查一下,如果我發現somethig我會更新答案。 – klennepette 2010-06-23 13:58:40

+0

謝謝。那很有意思。任何關於性能差異的想法? – 2010-06-23 18:44:45