、、、およびproduct_category
のフィールドid
を持つテーブルがあります。name
parent_id
level
たとえば、カテゴリAgricultureにはid = 75
、、level = 1
およびがありparent_id = NULL
ます。とうもろこし、小麦、ライ麦などのサブカテゴリにはとがlevel = 2
ありparent_id = 75
ます。
私のサイトでは、トップレベルのカテゴリとその下に5つのサブカテゴリのみを表示したいと思います。しかし、それらを取得するためにクエリを実行することは、私が思っていたよりも難しいです。
次のクエリを実行すると、次のようになります。
SELECT a.name, a.parent_id FROM product_category a
WHERE (
SELECT b.level
FROM product_category b
WHERE b.id = a.parent_id
LIMIT 1
) = 1
すべてのトップレベルのカテゴリとサブカテゴリを取得しますが、サブカテゴリは数千あるため、それぞれの最初の5つだけが必要な場合は、非常に高額になります。
私が次のことをした場合:
SELECT a.name, a.parent_id FROM product_category a
WHERE (
SELECT b.level
FROM product_category b
WHERE b.id = a.parent_id
LIMIT 1
) = 1
LIMIT 5
トップレベルカテゴリごとに5つのサブカテゴリではなく、5つのサブカテゴリのみを取得します。
それから私はそれを次のようにすることを考えました:
(
SELECT a.name, a.parent_id FROM product_category a
WHERE parent_id = 12
LIMIT 5
) UNION (
SELECT a.name, a.parent_id FROM product_category a
WHERE parent_id = 21
LIMIT 5
) UNION (
SELECT a.name, a.parent_id FROM product_category a
WHERE parent_id = 75
LIMIT 5
) UNION (
.
.
.
これは非常に汚くてハードコーディングされているように見えますが、それでも私が今考えることができる唯一の方法です。これに対する他の解決策はありますか?
ありがとう!