2010-07-17 99 views
0

我有兩個表,productsproduct_tagsmysql選擇數據

產品表;

product_id int 
name varchar 
description text 
price decimal(12,2) 
status enum 
sale int 
hit int 
date_add datatime 
date_update datetime 

product_tags表;

tag_id int 
product_id int 
tag varchar 

其中product_tags表具有一對多的關係與products,例如:

tag_id | product_id | tag 
1  1    tag1 
2  1    tag2 
3  1    tag3 

我想從一個查詢中提取數據。 (產品和產品標籤)。

回答

2

使用這樣的事情:

SELECT * 
    FROM products p 
INNER JOIN product_tags pt 
    ON (p.product_id = pt.product_id) 

如果你想不管獲取所有的產品是否有標籤或沒有,則使用外連接。

SELECT * 
    FROM products p 
    LEFT OUTER JOIN product_tags pt 
    ON (p.product_id = pt.product_id) 

如果你正在嘗試了每種產品的標籤合併成一個逗號分隔列表,那麼這樣的事情可能會在MySQL工作:

SELECT p.product_id, GROUP_CONCAT(pt.tag SEPARATOR ',') 
    FROM products p 
    LEFT OUTER JOIN product_tags pt 
    ON (p.product_id = pt.product_id) 
GROUP BY p.product_id; 

對於GROUP_CONCAT的進一步資料,請參閱MySQL Reference Manual

+0

湯姆謝謝你的回答。但我試過這個。 此查詢重新生成更多行。如果產品有標籤。此查詢返回三行。 – alioygur 2010-07-17 11:47:35

+0

是的,如果您正在選擇產品AND標籤的數據,您將獲得每行產品和標籤的組合。如果一個產品有3個標籤,那麼該產品將有三排,每個標籤一個。 你究竟想要什麼?您是否想爲每個包含所有標籤串聯的單個列的產品分配一行?這聽起來有點奇怪。 – Tom 2010-07-17 11:57:53

+0

是的,我只想結果與標籤。我認爲這是不可能的。我需要爲此做兩個單獨的查詢。 這樣; $ query_product_data = mysql_query(「SELECT * FROM products where product_id ='1'」); $ query_product_tags_data = mysql_query(「SELECT * FROM product_tags WHERE product_id ='1'」); 這是最好的方法? – alioygur 2010-07-17 12:14:52