2017-03-10 38 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