2013-07-09 102 views
-1

這是來自足球系統,每個遊戲,玩家和遊戲的「日誌」可以保存統計。從兩個不同的表格中獲得結果mysql

  • 「bold_players」 是與球員的表:ID,姓名,年齡...
  • 「bold_playlog」 是所有日誌,以遊戲的表:ID,CREATEDATE,日誌類型,playerid ..
    「logtype = 1」是一個目標(只有一個目標 - 每個目標在桌面上都會有一個帖子/ ID「bold_playlog」,所以如果一個遊戲有四個目標,那麼在「bold_playlog」相同的gameid)。

我該如何獲得所有球員列表,按目標排序?

這裏是我的代碼的權利,但我想我已經加入了兩個表或類似的東西!?

$data_player = mysql_query("SELECT id, name, goals, playtogoal FROM bold_players ORDER BY name ASC "); 
while ($row_player = mysql_fetch_assoc($data_player)) { 

$seasonstart = mktime(0, 0, 0, 7, 1, date('Y')-1); 

$logplayer = $row_player['id']; 
$data_log = mysql_query("SELECT id, createdate, logtype FROM bold_playlog WHERE logplayer=$logplayer AND logtype = 1 AND createdate > $seasonstart "); 
$getresult = mysql_num_rows($data_log); 

if($getresult > 0) { 

echo 'the result'; 

}} 
+0

「按目標排序」...在第一個目標的時候,或者是目標的數量還是...? –

+0

對不起!目標的數量。 –

回答

0

一個簡單LEFT JOIN應該這樣做,這個訂單進球最多的第1W這將是DESC部分,首先使用ASC最少的目標。

SELECT a.*, COUNT(b.playerid) goals 
FROM bold_players a 
LEFT JOIN bold_log b 
    ON b.playerid = a.id 
AND b.logtype=1 
GROUP BY a.id, a.name, a.age 
ORDER BY COUNT(b.playerid) DESC 

An SQLfiddle to test with

如果您還需要更多的邏輯類型,則必須稍微更改該查詢。如果offside是logtype 2,查詢將是;

SELECT a.*, 
    COALESCE(SUM(b.logtype=1), 0) goals, 
    COALESCE(SUM(b.logtype=2), 0) offsides 
FROM bold_players a 
LEFT JOIN bold_log b 
    ON b.playerid = a.id 
-- AND (b.logtype=1 OR b.logtype=2)  -- for speedup if there are many types 
GROUP BY a.id, a.name, a.age 
ORDER BY COALESCE(SUM(b.logtype=1), 0) DESC 

Another SQLfiddle

+0

謝謝,它看起來不錯 - 它的工作原理。如果我還希望將「越位」計數也放在'bold_log'中,該怎麼辦? (是每個球員越位的次數)? –

+0

@LasseBoWamsler用新信息更新了答案。 –

+0

完美,謝謝 - 現在它工作:) –

0

也許試試這個..我猜它一定是這樣的

SELECT name, goals, sum(playtogoal) as goals, createdate, logtype 
FROM bold_players as ps LEFT JOIN bold_playlog as pl ON ps.id=pl.logplayer 
WHERE pl.logtype = 1 AND pl.createdate > $saesonstart 
GROUP BY ps.id ORDER BY name ASC 

我會做一個LEFT JOIN,因爲有可能是球員沒有目標,他們將顯示太

相關問題