2013-01-14 87 views
2

如何限制每個idWHERE子句中的結果? 我的查詢是:每個父母身份的Mysql限制

SELECT name 
FROM location_areas 
WHERE parent IN ("1,2,3") 
ORDER BY popularity,name  

父母不是唯一的。

我需要得到每個父idWHERE條款的10個結果。

例如表結構是:

id name parent 
1 name 0 
2 name 1 
3 name 1 
4 name 80 
5 name 80 
6 name 80 
7 name 80 
8 name 1 
+0

把你的表結構,它很容易。 –

+1

我希望以下鏈接幫助。 http://stackoverflow.com/questions/2740071/is-there-a-way-to-limit-results-per-group-of-result-rows-in-mysql?rq=1 –

回答

2

試試這個:

SELECT 
    T.name, 
    T.popularity, 
    T.parent, 
    T.rank 
FROM 
(
SELECT 
    L.name, 
    L.popularity, 
    L.parent, 
    @rank := IF(@parent = parent, @rank + 1, 1) rank, 
    @parent := parent 
FROM location_areas L, 
(SELECT @rank := 1, @parent := NULL) R 
) T 
WHERE T.rank <= 10 

編輯

SELECT T.name, T.popularity, T.parent, T.level, T.rank 
FROM (
     SELECT L.name, L.popularity, 
      L.parent, L.level, 
      @rank := IF(@parent = parent, @rank + 1, 1) rank, 
      @parent := parent 
     FROM location_areas L, 
      (SELECT @rank := 1, @parent := NULL) R 
     WHERE L.parent IN (".$ids.") 
    ) T WHERE T.rank <= 10; 
+0

這看起來不錯,但不工作 –

+0

也許!問題是什麼?你有錯誤嗎? –

+0

'SELECT L.name,L.popularity,L.parent,@rank:= IIF(@parent = parent'at line 7 –

0

你可以根本就長眠這個

SET @level = 0; 
SET @group = ''; 

SELECT 
    name 
FROM (
    SELECT 
     name , 
     parent 
     @level := IF(@group = parent, @level+1, 1) AS level, 
     @group := parent as EGroup 
    FROM test 
    WHERE parent IN ("1,2,3") 
    ORDER BY parent 
) rs 
WHERE level < 11 
+0

這將返回所有結果。不是每個家長10個。 –