3

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

子产品表

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。


例如,我想要这个输出:

编号 = 1

第一种颜色 = 303030

第一种颜色名称 = color1

第二种颜色 = ededed

第二个颜色名称 = color4

编号 = 2

第一种颜色 = f3f3f3

第一种颜色名称 = color2

第二种颜色 = dcdcdc

第二个颜色名称 = color3


有任何想法吗?

提前感谢,对不起我的英语:)

4

4 回答 4

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
于 2013-07-01T10:50:00.840 回答
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'
于 2013-07-01T10:59:34.860 回答
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
";
}

...请注意,您不仅限于“while”。其他类型的循环也可以工作(例如 for($i=0;$i

于 2013-07-01T11:04:24.297 回答
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'
于 2013-07-01T11:07:37.437 回答