我正在尝试从具有类别 ID(1、5、12)的类别中选择 DISTINCT 产品,由 MySQL 数据库中的 cat_order + prod_order 排序
问题:
如果在多个类别中找到产品,我需要显示第一个结果,
即:产品编号 1 分配给类别 1 和 5,我需要显示类别 1 中的产品编号 1 及其 prod_order 并跳过类别 5 中的列表,
- 基本上我需要显示类别 1 中的所有产品,而不是移动到类别 5 并显示那里的所有产品,其中产品 id 以前未显示,然后移动到列表中的另一个类别 (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
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
每个产品可以属于任意数量的类别,例如产品 id 1 属于上例中的类别 id 1 和 5。
非常感谢任何回复。帕夏