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))

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_productsの外部キーを持っていcart_categoriesませんか? 次に、次を追加できます。

AND p.categoryid=ca.categoryid

于 2012-04-13T11:11:21.063 に答える