2013-05-17 48 views
1

我有两个表:从两个表中选择多行一气呵成在MySQL

products (id,title,price) 
types (id,idProduct,type,additionalPrice). 

我想要显示所有产品,并随后将其类型以最有效的方式列表,基本的东西像这样:

Product1 (price1) 
ProductType1 (+x USD) 
ProductType2 (+y USD) 

Product2 (price2) 
ProductType3 (+w USD) 
ProductType4 (+z USD) 

etc 

一个解决方案,我能想到的是使用GROUP_CONCAT和PHP爆炸的结果,但直觉告诉我我们有了一个更好的办法。

回答

0

我建议查询设置以下值的记录...

  • Products.ID
  • Products.Title
  • Products.Price
  • Types.Type
  • Types.AdditionalPrice

...,然后只用PHP来处理格式化,一旦你拥有的数据。如果您通过Products.TitleTypes.Type订购结果,那么使用最少的PHP编码就可以很容易地获得所需的输出。

查询将是这样的:

SELECT 
    Products.ID 
    Products.Title 
    Products.Price 
    Types.Type 
    Types.AdditionalPrice 
FROM Products 
INNER JOIN Types ON Products.ID = Types.idProducts 
ORDER BY Products.Title, Types.Type 

你可能甚至不需要Products.ID价值,但它往往是非常有用的可在前端的PK。无论如何,你可以从SELECT列表中删除它(但不是加入!),查询就会正常。

+0

我实现了这个解决方案,这是最直接的。我希望有更深奥的东西:)谢谢 – pandronic

+0

很高兴它成功了!我也喜欢更多涉及的解决方案 - 也许下次:) –

0

我希望这是你正在寻找pandronic什么:

SELECT p.id, p.title, p.price, t.type 
FROM products p 
INNER JOIN types t ON (t.idProduct = p.id) 

,如果你想将你的结果通过产品设置,那么你可以做到这一点

SELECT p.id, p.title, p.price, GROUP_CONCAT(t.type) 
FROM products p 
INNER JOIN types t ON (t.idProduct = p.id) 
GROUP BY p.id 
+0

不,我知道关于GROUP_CONCAT,但它感觉有点hacky。 – pandronic