2014-03-06 40 views
-1

我有一個運行2個查詢的PHP腳本。第一個查詢是結合兩個SQL查詢來從一個表中使用where子句獲取所有內容,並且只從另一個表中獲得所有內容

"SELECT PID , EXPERIENCE , LASTLOGIN , WON , LOST , TIED , PRODUCT1_COUNT , PRODUCT2_COUNT , PRODUCT3_COUNT , AD_FREE , CODENAME , FB_UID , WSBALANCE , BEST_GAME_SCORE , BEST_WORD_SCORE , BEST_MOVE_SCORE , MW_PLAYED 
FROM user 
WHERE (PID > 9 AND (('. $serverTime .'- LASTLOGIN < 1209600) OR (AD_FREE + PRODUCT1_COUNT + PRODUCT2_COUNT + PRODUCT3_COUNT + PRODUCT4_COUNT) > 0))" 

然後腳本的下一步是遍歷此查詢的每一行來構建一個html表。在此過程中,我查詢第二個表格(games1)以計算第一個查詢返回的活動遊戲數量。

$id = $row['PID']; 

$pSQL = "SELECT COUNT(SID) AS c 
     FROM games1 
     WHERE ACTIVE = 1 AND (P1_UID = $id OR P2_UID = $id OR P3_UID = $id OR P4_UID = $id)"; 

我一直在試圖圍繞如何使用連接來結合這兩個查詢,但我只是沒有得到它。我非常感謝幫助,因爲這種組合可以節省我們的腳本一段時間。

+0

格式的查詢,並刪除不正確的tags.'SELECT等等等等FROM(選擇1加入選擇2)' – Mihai

回答

1

您可以使用加入,下面的查詢將給予從用戶表中的數據,並從遊戲桌每用戶數

SELECT 
    u.PID, 
    u.EXPERIENCE, 
    u.LASTLOGIN, 
    u.WON, 
    u.LOST, 
    u.TIED, 
    u.PRODUCT1_COUNT, 
    u.PRODUCT2_COUNT, 
    u.PRODUCT3_COUNT, 
    u.AD_FREE, 
    u.CODENAME, 
    u.FB_UID, 
    u.WSBALANCE, 
    u.BEST_GAME_SCORE, 
    u.BEST_WORD_SCORE, 
    u.BEST_MOVE_SCORE, 
    u.MW_PLAYED , 
    COUNT(g.SID) AS c 
FROM 
    `user` u 
    LEFT JOIN games1 g 
    ON (
    (g.P1_UID = u.PID 
    OR g.P2_UID = u.PID 
    OR g.P3_UID = u.PID 
    OR g.P4_UID = u.PID) AND g.ACTIVE = 1 
) 
WHERE (PID > 9 
    AND (('. $serverTime .' - u.LASTLOGIN < 1209600) 
     OR (u.AD_FREE + u.PRODUCT1_COUNT + u.PRODUCT2_COUNT + u.PRODUCT3_COUNT + u.PRODUCT4_COUNT) > 0) 
) 
    GROUP BY u.PID 
+0

謝謝。這很好。不幸的是,這條SQL語句所需的時間大約是6秒,當我將它們分開時,它也是6秒左右...遊戲1表只有2000條記錄,用戶表只有800條記錄。有沒有辦法讓這個更快? – naphier

+0

@ user2388129確保你的索引是來自games1表* P1_UID,P2_UID,P3_UID,P4_UID *的列,如果它們沒有索引,則添加一個複合索引,即* ALTER TABLE'games1'ADD INDEX't​​est_index'('P1_UID' ,'P2_UID','P3_UID','P4_UID','ACTIVE'); *它會幫你 –

+1

謝謝我會試試看。我相信我對列和主鍵上的索引感到困惑......我想我現在已經明白了。但是現在我必須弄清楚我需要在表格中索引什麼。更多閱讀!好極了! – naphier

相關問題