MySQL PHP多查询

时间:2013-07-01 10:48:15

标签: php mysql select multi-select

我有两个表,颜色和子产品

子产品表

SubProductId SubProductColor1 SubProductColor2
1            1                4
2            2                3

颜色表

ColorId ColorName ColorHex ColorCategory
1       color1    303030   0
2       color2    f3f3f3   0
3       color3    dcdcdc   1
4       color4    ededed   1

在SubProductColor1和SubProductColor2中,我保存了ColorId。

SubProductColor1是ColorCategory 0。

SubProductColor2是ColorCategory 1。

我明白了:

SELECT *
FROM SubProducts
INNER JOIN Colors
ON Colors.ColorId=SubProducts.SubProductColor1
WHERE ProductId='$product_id'

但这仅适用于一种颜色。

我想在单个查询中获取两种颜色的ColorHex。

<小时/> 例如,我想要这个输出:

Id = 1

第一种颜色= 303030

第一个颜色名称= color1

第二种颜色= ededed

第二个颜色名称= color4

Id = 2

第一种颜色= f3f3f3

第一个颜色名称= color2

第二颜色= dcdcdc

第二个颜色名称= color3


有什么想法吗?

提前致谢并抱歉我的英语:)

4 个答案:

答案 0 :(得分:2)

从查询中删除WHERE条件

SELECT *
FROM SubProducts
INNER JOIN Colors
ON Colors.ColorId=SubProducts.SubProductColor1

修改

SELECT *
FROM SubProducts,Colors
WHERE (Colors.ColorId = SubProducts.SubProductColor1 OR Colors.ColorId = SubProducts.SubProductColor2)
AND ProductId='$product_id'
GROUP BY Colors.ColorName

答案 1 :(得分:1)

这应该有效

SELECT a.SubProductId , a.ColorHex color1, a.ColorName color1name, c.ColorHex color2, c.ColorName color2name 
  from (select * FROM SubProducts 
  JOIN Colors 
    ON Colors.ColorId = SubProducts.SubProductColor1 ) a
  JOIN colors c 
    ON c.ColorId = a.SubProductColor2
 Where SubProductId='$product_id'

答案 2 :(得分:1)

SELECT s.subproductid
     , c1.colorhex first_color
     , c1.colorname first_colorname
     , c2.colorhex second_color
     , c2.colorname second_colorname 
  FROM subproducts s 
  JOIN colors c1 
    ON c1.colorid = s.subproductcolor1 
  JOIN colors c2 
    ON c2.colorid = s.subproductcolor2
 ORDER
    BY subproductid;

php循环可能看起来像这样 - 虽然显然你是使用现代方法而不是这里显示的弃用的mysql_方法...

while($row = mysql_fetch_assoc($result)){
echo "id = ".$row['subproductid']."<br>\n
      1st color = ".$row['first_color']."<br>\n
      1st color name = ".$row['first_colorname']."<br>\n
      2nd color = ".$row['second_color']."<br>\n
      2nd color name = ".$row['second_colorname']."<br>\n
";
}

...请注意,您并不仅限于&#39;而且&#39;。其他类型的循环也可以正常工作(例如($ i = 0; $ i)

答案 3 :(得分:1)

尝试这个..

SELECT SubProductID, c1.ColorHex as Color1,c1.ColorName as ColorName1,c2.ColorHex as    Color2,c2.ColorName as ColorName2
    FROM SubProducts INNER JOIN 
    Colors c1 ON c1.ColorId=SubProducts.SubProductColor1 INNER JOIN 
    Colors c2 ON c2.ColorId=SubProducts.SubProductColor2 INNER JOIN 
    WHERE ProductId='$product_id'