MySQLデータベースからcat_order+prod_orderで注文されたカテゴリID(1、5、12)のカテゴリ内からDISTINCT製品を選択しようとしています
問題:
製品が複数のカテゴリで見つかった場合、最初の結果を表示する必要があります。
つまり、製品番号1はカテゴリ1と5に割り当てられています。カテゴリ1の製品番号1をそのprod_orderと一緒に表示し、カテゴリ5のリストをスキップする必要があります。
- 基本的に、カテゴリ1のすべての製品を表示する必要があります。カテゴリ5に移動して、以前は製品IDが表示されていなかったカテゴリ5からすべての製品を表示し、リスト内の別のカテゴリに移動します(12)
私が次のようなものを実行した場合:
SELECT
prod_to_cat.prod_id AS prod_to_cat_prod_id,
prod_to_cat.prod_order AS prod_to_cat_prod_order,
prod_to_cat.cat_id AS prod_to_cat_cat_id,
prod_to_cat.cat_order AS prod_to_cat_cat_order,
products.id,
products.name
FROM
prod_to_cat, products
WHERE
prod_to_cat.prod_id = products.id
AND prod_to_cat.cat_id IN (1, 5, 12)
GROUP BY
prod_to_cat.prod_id
ORDER BY
prod_to_cat_cat_order ASC,
prod_to_cat_prod_order DESC
一貫性のない結果が得られます(製品1はリストの最初のカテゴリから選択されません)。そのため、「GROUP BY prod_id」なしで選択し、prod_idでグループ化するよりも別のselectでラップすることにしました。
そのようです:
SELECT
prod_to_cat_prod_id,
prod_to_cat_prod_order,
prod_to_cat_cat_id,
name
FROM
(
SELECT
prod_to_cat.prod_id AS prod_to_cat_prod_id,
prod_to_cat.prod_order AS prod_to_cat_prod_order,
prod_to_cat.cat_id AS prod_to_cat_cat_id,
prod_to_cat.cat_order AS prod_to_cat_cat_order,
products.id,
products.name
FROM
prod_to_cat, products
WHERE
prod_to_cat.prod_id = products.id
AND prod_to_cat.cat_id IN (1, 5, 12)
ORDER BY
prod_to_cat_cat_order ASC,
prod_to_cat_prod_order DESC
) AS prod
GROUP BY
prod_to_cat_prod_id
ORDER BY
prod_to_cat_cat_order ASC,
prod_to_cat_prod_order DESC
LIMIT 0, 10;
私がやろうとしていること:
私はこれを行うためのより効率的な方法を見つけようとしています。
テーブル構造:
prod_to_cat:
prod_id | cat_id | cat_order | prod_order |
1 1 1 2
2 1 1 0
3 1 1 0
1 5 2 4
4 5 2 0
products:
id | name | descr | price |
1 name_1
2 name_2
3 name_3
4 name_4
各製品は任意の数のカテゴリに含めることができます。たとえば、上記の例では、製品ID1はカテゴリID1および5に含まれています。
返信ありがとうございます。パシャ