0

我正在使用子查询从类别及其下的所有子类别中返回产品。这是它的sql查询:

SELECT
    ca.categoryid, p.*, FLOOR(prodratingtotal/prodnumratings) AS prodavgrating, 0 AS prodgroupdiscount
FROM
    cart_categoryassociations ca, cart_products p
WHERE
    p.prodvisible=1 AND p.prodfeatured=1 AND (ca.categoryid=47 OR ca.categoryid IN (SELECT categoryid FROM cart_categories WHERE catparentid=47))

当我运行它时,它只根据p.prodvisible=1 AND p.prodfeatured=1部分返回结果,忽略(ca.categoryid=47 OR ca.categoryid IN (SELECT categoryid FROM cart_categories WHERE catparentid=47))部分。

(换句话说,它会带回系统中的所有特色产品,即使它们不属于子查询中提到的类别)

PS:我试过单独运行括号中的部分,它返回正确的类别。

MySQL 版本 5.0.8。

4

2 回答 2

1
FROM
cart_categoryassociations ca, cart_products p

我不知道你的数据库结构,但不应该用左连接而不是完全连接来完成。这是故意的吗?

于 2012-04-13T10:37:27.780 回答
1
WHERE
    p.prodvisible=1 AND p.prodfeatured=1 AND (ca.categoryid=47 OR ca.categoryid IN (SELECT categoryid FROM cart_categories WHERE catparentid=47))

我认为这是返回 cart_products 中与子句匹配的p.prodvisible=1 AND p.prodfeatured=1每一行匹配的所有行(ca.categoryid=47 OR ca.categoryid IN (SELECT categoryid FROM cart_categories WHERE catparentid=47))

没有cart_products某种外键cart_categories?那么你可以添加:

AND p.categoryid=ca.categoryid

于 2012-04-13T11:11:21.063 回答