如何对查询中的父项施加限制,但如果没有可用的父项,也可以接受其中的单个产品


How to impose a limit on the parent items in a query, but if no parent is available, also take the single products in it?

我们的情况是:

product

一个产品可以有很多孩子,也可以没有。如果它子级,则它是parent产品。如果没有子级,则它是simple产品。但是,每个孩子也是simple的产物。

因此:

  • 123:parent
    • 124:simple
    • 125:simple
  • 140:simple
  • 141:parent
    • 142:simple
  • 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
相关文章: