【发布时间】:2021-09-29 13:54:49
【问题描述】:
我对 SQL/PHP 很陌生,我正在尝试将两个表左连接,第二个表左连接两次。 这里的场景: 我有两张表,products 和 productvariations。在 productvariations 表中,我还有一列“colorvalue”,它告诉用户它是产品的标准颜色还是特殊颜色。
产品
idproducts | product | checked
-------------------------------
1 | testpr1 | 0
2 | testpr2 | 0
...
产品变化
productid | colorvalue | price
-------------------------------
1 | 0 | 12.50
1 | 1 | 10.25
2 | 0 | 14.50
2 | 1 | 13.00
...
现在我要做的是选择产品的所有列,并在产品变量表的两倍中向它们左连接,以获得两个不同的附加列作为价格。但只有那些具有检查值 = '0' 的产品。 从不同的其他问答中我设置了这个代码,但不知何故它没有给我任何结果。有人可以帮忙吗?
SELECT products.*, productvar1.price_single, productvar1.price_palette, productvar2.price_single, productvar2.price_palette, productvar1.price_specialconditions, productvar1.price_colorchange
FROM products
LEFT JOIN productvariations AS productvar1
ON products.idproducts = productvar1.product AND productvar1.colorvlaue = '0'
LEFT JOIN productvariations AS productvar2
ON products.idproducts = productvar2.product AND productvar2.colorvalue = '1'
WHERE products.checked = '0' LIMIT 200;
【问题讨论】:
-
您在哪里没有收到任何结果?在 MySQL 服务器中运行代码(使用 phpmyadmin 等工具)或从 php 代码的前端运行代码?
-
你的代码看起来不错。
-
你可能不需要 2 个左连接,你可以简单地做
productvar1.colorvlaue in ('0', '1') -
@FaNo_FN 抱歉,这是我的 php 代码的前端。将查询放入变量 $query 后,我检查 if ($result = mysqli_query($conn, $query)) 是否存在匹配项。但它总是自动转到 else 语句。
-
可能是因为您的查询中的拼写错误?这 >
AND productvar1.colorvlaue = '0'.. 它可能应该是AND productvar1.colorvalue = '0'因为如果我尝试这样做,您的查询似乎正在工作。看这里>db-fiddle.com/f/v3hB6Krrmwz88mhcdPi6i6/1