我们的情况是:
product
一个产品可以有很多孩子,也可以没有。如果它有子级,则它是parent
产品。如果没有子级,则它是simple
产品。但是,每个孩子也是simple
的产物。
因此:
- 123:
parent
-
- 124:
simple
- 124:
-
- 125:
simple
- 125:
- 140:
simple
- 141:
parent
-
- 142:
simple
- 142:
- 160:
simple
- 170:
simple
还有一张名为的表
product_special
其具有CCD_ 14和CCD_。如果客户有140个parent
产品和870个simple
产品(非子产品),我们希望将其限制在250个,并且只显示这250个,但如果适用,则显示子产品。可能是前250个单独是simple
产品,也可能是70个parent
/180个simple
。
我对此深入骨髓,所以我不确定这是否清楚,但任何想法都将不胜感激。感谢
您可以通过UNION:来完成
SELECT id FROM product
WHERE
(SELECT COUNT(*) FROM product_special WHERE product_parent_id=id)>0
UNION
SELECT id FROM product
WHERE
(SELECT COUNT(*) FROM product_special WHERE product_parent_id=id)=0
LIMIT 250
或者通过加入子查询并按其排序:
SELECT id, s.cnt AS child_cnt FROM product
LEFT JOIN
(
SELECT product_parent_id, COUNT(*) cnt
FROM product_special
GROUP BY product_parent_id
) s ON s.product_parent_id=id
ORDER BY child_cnt DESC
LIMIT 250