2011-07-26 241 views
0

考慮下面的表格結構:幫助MySQL查詢

users (user_id, ...) 
images (image_id, user_id, ...) 
tag_links (tag_id, image_id) 
tags_names (tag_id, tag_name) 

比方說,任何給定的user_id已在images表中的多個圖像,並且圖像具有存儲在tag_links多個標籤。

我怎樣才能加入這些表格,以獲得所有圖像上任何給定的user_id所使用的所有tag_name?這些查詢(連接多個表)是否緩慢並且不被推薦,或者這樣做是否很常見?

謝謝。

回答

8

加入是常見的,這是它應該完成的方式。

SELECT tn.tag_name 
FROM tags_names AS tn 
INNER JOIN tag_links AS tl ON tn.tag_id=tl.tag_id 
INNER JOIN images AS i ON tl.image_id=i.image_id 
WHERE i.user_id=YOURUSERID 

你的表的設計,雖然纔有意義,如果一個標籤可以有一個以上的名字,如果沒有就tag_links使用列name

+0

+1。如果查詢不需要用戶表中的任何內容(例如用戶名等),那麼您可以跳過對錶用戶的加入。如果您想刪除重複的標籤,您可能還需要DISTINCT標籤名稱。 – StuartLC

+0

thx @nonnb,錯過了他不需要用戶表。 – Jacob

+0

@cularis真的很感謝,但正如你所說,我的設計只有在標籤可以有多個名稱時纔有意義,否則我應該在tag_links中添加一列。你的意思是,tag_names不是必需的,我應該有三列的tag_links表:tag_id,tag_name和image_id。但我的想法是,由於標籤(例如「java」)可用於不同的圖像。因此,如果我只有一張桌子,我需要爲每張圖片的相同標籤添加新行。還是你的意思是別的? – Roman