2010-07-17 68 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