2012-10-16 84 views
0

我想實現項目的標籤系統。標籤包含在一個名爲標籤的表格中,而我有另一個將項目鏈接到標籤的表格標籤。一個項目可以有多個標籤。當我顯示該項目時,我想列出所有標籤。我的問題是,有沒有辦法用一個查詢來做到這一點?如果我將商品結果加入到標籤表中,我可以獲得一個商品的多個記錄(對應於多個標籤),或者如果我通過標籤包含一個商品組,我會得到一條記錄,但只有第一個標籤。PHP/MySQL查詢加入

另一種方法是做第二個查詢只是爲了得到標籤,但效率不高。

Item table 
Id | name 

Tag table 
Id | tag 

Tagitem table 
Id|itemid|tagid 

Php 

$sql = "select i.*,ti.*,t.* 
FROM 'items' i 
LEFT JOIN 'tagitem' ti 
ON i.id=ti.itemid 
LEFT JOIN 'tag' t 
On ti.tagid=t.id 
WHERE i.id='2'"; 

//returns multiple records 

$sql.="group by i.id"; 

//returns only first tag 

Thx對於任何建議。

+0

你給GROUP_CONCAT一個試試嗎?它是如何爲你工作的? –

回答

1

嘗試GROUP_CONCAT

你應該能夠選擇你的標籤作爲子查詢,並將它們組合在一起形成一個數組。

SELECT 
    Item.name, 
    GROUP_CONCAT (Tags.tag SEPERATOR ',') AS tags 
FROM 
    Item 
    LEFT JOIN Tagitem ON Tagitem.itemid = Item.Id 
    LEFT JOIN Tag ON Tagitem.tagus = Tag.Id 
WHERE 
    Item.Id = 2 

給我一個鏡頭,讓我知道會發生什麼。我在表格結構上有點猜測,所以可能需要一些調整。

+0

謝謝。我有一個語法錯誤:「正確的語法使用附近'(標籤。SEPERATOR',')AS標籤從項目左加入'tagitem'噸我i。'不知道如何調試 – user1260310

+0

在GROUP_CONCAT語句中,您的意思是Tags.tag或tag.tag – user1260310

+0

對不起Tag.tag(tablename.fieldname),而不是Tags.tag。在數據庫中,我總是會看到SQL的一些問題我實際上並沒有在工作,顯然你可以使用表和字段別名 - 我試着在這裏避免它們,因爲我發現它使得代碼更不可讀。 –