0

この記事のガイドに従って、ネストされたモデルを使用しています。

ネストされたカテゴリ テーブルは次のとおりです。

nested_category

商品表は以下の通りです。

製品

選択したレベルの親ノードと子ノードを取得したい。例: テレビが選択されている場合、クエリが表示されます。さらに、各カテゴリの各製品の数も表示する必要があります。

Electronics
  Television
    Tube     (2)
    LCD      (1)
    Plasma   (2)

次のクエリを書きました

SELECT parent.name, count(product.product_id)
FROM nested_category AS node,nested_category AS parent,nested_category AS midpoint
LEFT JOIN product ON product.product_id=midpoint.category_id
WHERE (node.lft BETWEEN parent.lft AND parent.rgt) AND (node.lft BETWEEN midpoint.lft AND midpoint.rgt) AND midpoint.name='TELEVISIONS'
GROUP BY parent.name
ORDER BY node.lft

私が得た結果はここにあります

クエリの結果

これにより、すべての子ノードと親ノードが適切に取得されますが、カウントが間違っています。ここでSQLフィドルを確認してください

4

1 に答える 1

1

これを試して:

SELECT parent.category_id as pid, parent.name as pname, SUM(product.product_id IS NOT NULL)
FROM
nested_category AS parent,
nested_category AS midpoint,
nested_category AS node
LEFT JOIN product ON product.category_id=node.category_id
WHERE (node.lft BETWEEN parent.lft AND parent.rgt)
AND (node.lft BETWEEN midpoint.lft AND midpoint.rgt)
AND midpoint.name='TELEVISIONS'
GROUP BY parent.category_id
ORDER BY parent.category_id;
于 2013-10-25T16:08:22.997 に答える