2011-11-20 17 views
3

另一個表我有一個表稱爲「上崗」用以下結構:加入含標籤

post_id | post_body | post_posterid 

我呼喚另一個表「標籤」:

tag_id | tag_name 

第三個錶店兩個表格之間的關係(對於每個post_id將具有多個tags_id作爲分開的記錄):

post_id | tag_id 

這與我試圖創建的stackoverflow的標記類似。

但我不知道如何加入表格並在單個記錄中爲每個帖子連接標籤。像這樣:

post_id | post_body | post_postername | tag_id1 | tag_id2 | tag_id3 ..... tag_name1 | tag_name2 | tag_name3 .... 

所以,當使用PDO從MySQL中獲取數據時,我可以避免進一步的查詢來獲取標籤名稱。

編輯 更多細節:

第一個表( 「上崗」)包含帖子ID(唯一的ID),發佈消息和海報的ID(存儲在表中是唯一投稿者ID 「海報」)。 第二個表「標籤」包含可能的標籤(如「php」,「vb.net」等,像在stackoverflow中)與唯一tag_id。 第三個表格包含發佈的消息和標籤之間的關係。所以它包含post_id及其對應的tag_id。可以將多個標籤分配給相同的帖子。

我想要什麼:當查詢時,我可以加入「職位」與「海報」表來獲取姓名。但我想爲每個帖子獲取標籤。

GROUP_CONCAT()是我的問題的答案。但是如何獲得它作爲tag_id - tag_name對,而不是一個字段中的所有tag_id和另一箇中的所有tag_name。

如:1-VB , 5-PHP , 19-SQL

我會在PHP

分開這對我努力是一樣的計算器的標籤系統。

回答

4

關鍵字GROUP_CONCAT

和查詢就像

SELECT 
posts.*, 
GROUP_CONCAT(tags.tag_name) tags 
FROM 
posts 
LEFT JOIN relation ON relation.post_id = posts.id 
LEFT JOIN tags ON tags.tag_id = relation.tag_id 
GROUP BY posts.id 

希望這有助於

+0

謝謝吐蕃。所以我應該將tag_id和tag_name作爲單獨的字段group_concat進行分組,並在PHP中對其進行分割並輸出。正確嗎? –

+0

我們如何將它作爲tag_id - tag_name對而不是id和name在單獨的字段中? –

+0

將GROUP_CONCAT(tags.tag_name)更改爲GROUP_CONCAT(CONCAT(tags.tag_id,' - ',tags.tag_name)) –