我甚至不確定標題是否正確,但這裏是簡單的情況。UNION和子查詢(MySQL)
我有鄰接表一個表吧:
comments
- id (int)
- parent_id (int)
- depth_level (int)
- ...
我想要做的是和限制以及每個行與以查詢深度級別返回0我想和工會一個查詢返回相同的表和一個順序,但是限制但不同的深度級別,我希望子查詢只返回父深度級別相關的行......等等。如果有幫助,我可以限制深度級別。 我有點卡住,沒有參考,像這樣:
select * from (select * from comments where depth = 0 order by id asc LIMIT 10) D0
union all
select * from (select * from comments where depth = 1 order by id asc LIMIT 10) D1
我得到聯合在一起行,但你可以看到,我想D1僅包含已與D0 IDS PARENT_ID行...和我想要多個層面。也許這是做錯的方法。我知道這是一廂情願的想法,但如果我能得到每一行,如果有更多的行比提供的限制,這將是很好的。
一個例子:
id parent_id depth title
1 0 0 Title 1
2 0 0 Title 2
3 1 1 Title 3
4 1 1 Title 4
5 1 1 Title 5
6 1 1 Title 6
7 1 1 Title 7
8 4 2 Title 8
9 4 2 Title 9
10 4 2 Title 10
11 4 2 Title 11
pseudo:
select * from table where depth = 0 order by id asc limit 1
union
select * from table where depth = 1 and parent_id from firstQuery.id order by id asc limit 2
union
select * from table where depth = 2 and parent_id from secondQuery.id order by id asc limit 3
result:
id parent_id depth title
1 0 0 Title 1
3 1 1 Title 3
4 1 1 Title 4
8 4 2 Title 8
9 4 2 Title 9
10 4 2 Title 10
編輯2:
要在peterm的答案擴大。
(
SELECT *
FROM comments
WHERE depth = 0
ORDER BY id DESC
LIMIT 2
)
UNION ALL
(
SELECT c.*
FROM comments c JOIN
(
SELECT id
FROM comments
WHERE depth = 0
ORDER BY id DESC
LIMIT 2
) p ON c.parent_id = p.id
LIMIT 5
)
id parent_id depth title
1 0 0 Title 1
2 0 0 Title 2
3 1 1 Title 3
4 1 1 Title 4
5 1 1 Title 5
6 1 1 Title 6
7 1 1 Title 7
但我想要的是限制PER父級深度級別,而不是深度級別的總和限制。像這樣(5%在這個例子中深度1):
id parent_id depth title
1 0 0 Title 1
2 0 0 Title 2
3 1 1 Title 3
4 1 1 Title 4
5 1 1 Title 5
6 1 1 Title 6
7 1 1 Title 7
8 2 1 Title 8
9 2 1 Title 9
10 2 1 Title 10
11 2 1 Title 11
12 2 1 Title 12
你能否顯示一些樣本數據,以及你想要的輸出是什麼樣的? – Tom
@Tom我試圖提供一個例子,不知道是否清除了東西。 – Keyframe