我想查詢一下,我可以檢索10行的間隔,每個標籤有5個標籤。MySQL:將查詢限制爲10行,其中每個索引有5個標籤
我已經houses
和tags
表,我知道如何僅對具有SELECT
簡單的查詢使用LIMIT
,但我怎麼能做到這一點在這種情況下做到這一點?
table houses
id house country
1 Grunt Mansion us
2 Hororo Suneku jp
3 Casa Cattani it
4 Sweet Home uk
5 Heinzvaiter de
6 F56X-5 us
7 Swan Jong cn
8 Drupnowevo ru
9 Bambagiador br
10 El Stanco es
table houses_tags
id id_house id_tag
1 1 1
2 1 2
3 1 3
4 1 4
5 2 1
6 2 2
7 2 3
8 2 4
table tags
id tag
1 minimal
2 baroque
3 cosy
4 simple
如果作出這樣一個查詢來獲取前10個房子:
SELECT *
FROM houses
LEFT JOIN (
SELECT *
FROM tags
INNER JOIN houses_tags
ON id_house = houses.id
LIMIT 5
) house_tag
LIMIT 0, 10
我得到的是這樣的:
query result
row house country tag id_house id_tag
1 Grunt Mansion us minimal 1 1
2 Grunt Mansion us baroque 1 2
3 Grunt Mansion us cosy 1 3
4 Grunt Mansion us simple 1 4
5 Hororo Suneku jp minimal 2 1
6 Hororo Suneku jp baroque 2 2
7 Hororo Suneku jp cosy 2 3
8 Hororo Suneku jp simple 2 4
9 Casa Cattani it NULL NULL NULL
10 Sweet Home uk NULL NULL NULL
我的問題是我得到的只有前10從查詢中刪除最後一個houses
的行,因爲第一個的tags
佔用了所有行
我可以寫一個查詢,我可以檢索前10個房屋和每個標籤5個?
query result
row house country tag id_house id_tag
1 Grunt Mansion us minimal 1 1
2 Grunt Mansion us baroque 1 2
3 Grunt Mansion us cosy 1 3
4 Grunt Mansion us simple 1 4
5 Hororo Suneku jp minimal 2 1
6 Hororo Suneku jp baroque 2 2
7 Hororo Suneku jp cosy 2 3
8 Hororo Suneku jp simple 2 4
9 Casa Cattani it NULL NULL NULL
10 Sweet Home uk NULL NULL NULL
11 Heinzvaiter de NULL NULL NULL
12 F56X-5 us NULL NULL NULL
13 Swan Jong cn NULL NULL NULL
14 Drupnowevo ru NULL NULL NULL
15 Bambagiador br NULL NULL NULL
16 El Stanco es NULL NULL NULL
最後我應該需要一個結果,我顯示這樣的例子:
Mansions Tags
Grunt Mansion minimal, baroque, cosy, simple
Hororo Suneku minimal, baroque, cosy, simple
Casa Cattani -
Sweet Home -
Heinzvaiter -
F56X-5 -
Swan Jong -
Drupnowevo -
Bambagiador -
El Stanco -
pages 1 | 2 | 3
我能做到嗎?
感謝您的幫助,您還可以幫助我瞭解CASE和@vars語法與一些解釋鏈接,這將是非常有用的我。 – vitto 2010-09-13 18:59:40
@Vittorio Vittori:MySQL [CASE文檔](http://dev.mysql.com/doc/refman/5.0/en/case-statement.html); @variable_name是一個變量。我使用笛卡爾積 - 'JOIN(SELECT @rownum:= 0,@id:= -1,@house_count:= 0)r' - 定義變量而不需要單獨的'SET'語句。 – 2010-09-13 19:17:22
抱歉,延遲 – vitto 2010-10-10 10:32:27