2017-03-10 40 views
1

组我有以下表MySql的限制行,但不截断行

id| name  |price| groupid | category 
--------------------------------------- 
1 | product1 | 14 | grp1 | apparel 
2 | product1 | 16 | grp1 | apparel 
3 | product1 | 36 | grp1 | apparel 
4 | product2 | 97 | grp2 | apparel 
5 | product2 | 87 | grp2 | apparel 
6 | product2 | 77 | grp2 | apparel 
7 | product3 | 3 | grp3 | apparel 
8 | product3 | 2 | grp3 | apparel 
9 | product3 | 5 | grp3 | apparel 

我想通过组ID来获取产品在这个表按类别和他们组的应用层。这是我使用的是简单的SELECT查询:

SELECT * FROM products 
WHERE category = 'apparel' 
LIMIT 0,5 

现在的问题是查询截断结果和grp2中的最后一个项目(ID = 6)不返回(正如人们所预料)。

我想要一个查询检测到一个组中的一个项目不返回,获取该项目,然后截断结果的其余部分。基本上我想要返回一个组中的所有项目或一个组中的所有项目。

我该如何做到这一点?

编辑:每个组可能有1到12个项目之间的任何地方。它是可变的。

+0

只要删除“限制0,5”。它将返回全部或无记录。 – ankur140290

+0

@ ankur140290删除不会。我仍然需要限制结果,并且不会获得潜在的数千个结果。我需要LIMIT,但不能以某种方式从组中删除行。 – Koder

回答

2

下面是做这件事的一种方法:

SELECT t1.* 
FROM products AS t1 
JOIN (
    SELECT DISTINCT groupid 
    FROM (
     SELECT groupid 
     FROM products 
     WHERE category = 'apparel' 
     LIMIT 0,5) AS t 
) AS t2 ON t1.groupid = t2.groupid 

查询使用包含属于该行的当施加LIMIT返回的所有不同groupid值派生表。

Demo here

+0

这太棒了,我会测试这个,然后接受你的答案。谢谢@Giorgos – Koder

+0

这个查询的性能如何?如果表格索引正确,它会很好地扩展吗? – Koder