SQL'in'中遇到问题

时间:2015-06-09 08:45:49

标签: php mysql sql where

我想搜索product_description中与某品牌匹配的所有记录,以及其他表product中的状态为“1”的记录。这是我有多远,但我在某处绊倒:

SELECT brand,
       name,
       product_id
FROM   product_description
WHERE  brand = $brandname
       AND product_id IN (SELECT product_id,
                                 status
                          FROM   product
                          WHERE  status = '1'); 

提前致谢

5 个答案:

答案 0 :(得分:2)

<强>原因:

如果要将其与IN一起使用,则内部查询应仅返回1列。

<强>解决方案:

从内部查询中删除status。在变量'周围使用单引号$brandname

$sql = "SELECT brand,name,product_id 
        FROM product_description 
        where brand = '$brandname'
              and product_id in 
                    (SELECT product_id FROM product where status='1')";

答案 1 :(得分:1)

无需在子查询中获取status。试试这个 -

$sql = "SELECT 
           brand,name,product_id 
        FROM product_description 
        WHERE brand ='$brandname' 
        AND product_id in (SELECT product_id FROM product where status='1')";

答案 2 :(得分:1)

需要将您的查询更新为

"SELECT brand,name,product_id FROM product_description where brand 
= '$brandname' and product_id in (SELECT product_id FROM product where 
status='1')";
  1. 如果变量$brandname不是整数
  2. ,则需要将变量product_id括在单引号中
  3. 您的子查询返回多个值,因此您只需选择folder2

答案 3 :(得分:0)

我不能说没有错误或输出查询,但我认为您不应该在子查询中选择“status”,因为您正在检查特定product_id是否在两者的结果集中product_id和状态。尝试重写子查询,以便只选择product_id。

答案 4 :(得分:0)

加入你的桌子。

$sql = "SELECT d.brand, d.name, d.product_id
FROM   product_description AS d
JOIN   product AS p ON d.product_id = p.product_id AND p.status = '1'
WHERE  d.brand = '$brandname'";

最佳做法是使用prepared statements