我有下面的表:match_id,player_slot,能力,水平MySQL查詢:簡化子查詢和聯盟
有每場比賽10個播放器插槽,每個英雄最多可以有25級和五分之一能力。我從API中提取數據,並且需要快速提取數據,所以我沒有太多靈活性來設置我的表。
但是,爲了顯示數據,我真的很努力地將現有的表格格式變成可行的東西。對於每場比賽,我想已經制定了這樣的數據:
球員SLOT1,在1水平的能力,在2水平的能力,......,有能力在16級
...
球員時隙10,在1水平的能力,在2級能力,...,16級
我能得到一個工作示例(Here's an example)了,但它是一個非常醜陋的查詢能力。對於每一行我有15個嵌套的子查詢,然後執行一個聯合來加入10行中的每一行。
摘錄查詢:
SELECT player_slot, ability,
(SELECT ability FROM api_abilities WHERE match_id = 119009486 AND player_slot = 1 AND level = 2),
...
(SELECT ability FROM api_abilities WHERE match_id = 119009486 AND player_slot = 1 AND level = 16)
FROM api_abilities
WHERE match_id = 119009486 AND player_slot = 1 AND level = 1
我怎麼會去簡化呢?我應該以不同的方式呈現這些數據來製作視圖或新表格嗎?同樣複雜的是,每個玩家都會在不同的級別結束遊戲。我現在所做的工作,但似乎必須有一個更有效的方式來運行查詢。我嘗試了一些不同的東西,但似乎無法使我的其他查詢的行合併正確。
我會刪除並調整player_slot ... – 2013-02-11 21:04:25
@Nitin Midha:是的,可以從查詢中刪除player_slot(> = 1和<= 10)上的謂詞;但從OP不清楚10個播放器插槽的限制是否由查詢執行,或者這是否是底層數據的限制。 – spencer7593 2013-02-11 21:06:42
謝謝,這個伎倆。 10個播放器插槽的限制是底層數據的一個限制,所以它在沒有WHERE子句中的a.player_slot項目的情況下工作正常 – user1723535 2013-02-12 15:30:04