我使用子查询返回类别及其下的所有子类别的产品。这是它的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))
部分。
(换句话说,它会带回系统中的所有特色产品,即使它们不属于子查询中提到的类别)
P.S:我已尝试单独在括号中运行该部件,并返回正确的类别。
MySQL版本5.0.8。
答案 0 :(得分:1)
FROM
cart_categoryassociations ca, cart_products p
我不知道您的数据库结构,但不应该使用左连接而不是完整连接。这是故意的吗?
答案 1 :(得分: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))
我认为这将返回与p.prodvisible=1 AND p.prodfeatured=1
匹配的cart_products中的所有行,用于(ca.categoryid=47 OR ca.categoryid IN (SELECT categoryid FROM cart_categories WHERE catparentid=47))
子句匹配的每一行。
不要cart_products
拥有cart_categories
的某种外键吗?
然后你可以添加:
AND p.categoryid=ca.categoryid