2013-02-13 25 views
0

我想從我的表格「遊戲」中爲每種遊戲類型選擇10個名稱。sql - 從每種類型中選擇金額

例如:10個RPG遊戲,10個動作遊戲,10個MMO遊戲...

的問題是,我的查詢佔用大量的資源,我想知道,如果有人有想法來寫這個查詢一個更好的方法:

SELECT name 
FROM games AS thisgame 
WHERE (SELECT COUNT(1) 
     FROM games 
     WHERE games.game_id = thisgame.game_id 
      AND games.type > thisgame.type) <= 9 
+1

@DON。 – 2013-02-13 09:05:14

+0

注意:mysqli不是您正在使用的數據庫,而只是一組PHP函數。而數據庫是** mysql **,沒有「我」 – 2013-02-13 09:06:56

+0

@DON ofc,對不起,我寫它很快,把*,我會編輯我的問題。 還有其他的方法嗎? – Dennis 2013-02-13 09:06:57

回答

2

做這種快速的一種方法是可變的把戲。它依賴於MySQL特定的語法來模仿窗口函數。 (1)``COUNT(*)`評價一樣`計數 - 事實上,也沒有:例如,檢索高達每類型的兩場比賽:

select s.name 
,  s.type 
from (
     select * 
     ,  (@rn := if(@cur=type, @rn+1, 1)) as rn 
     ,  @cur := type 
     from Games 
     join (select @cur := '') i 
     order by 
       type 
     ) s 
where rn <= 2 

Live example at SQL Fiddle.

+0

tnx但是,這個查詢有一個簡單的問題,當類型不是訂單時,它需要指定類型的次數並且再次選擇他之後 http://sqlfiddle.com/#!2/dfe72/1是否可以修復它?從你學習的地方使用可變的技巧? – Dennis 2013-02-13 13:35:30

+0

哎呀,現在忘了'order by',現在更新了。我似乎無法記住博客條目,但我希望你可以通過「groupwise max mysql」進行Google搜索。 – Andomar 2013-02-13 13:38:58

+0

tnx,我會google的.. – Dennis 2013-02-13 13:44:17