2015-07-10 110 views
0

我需要從兩個表中選擇一些數據, 請幫助我使用內部聯接進行此選擇。 玩家在selction2不能在選擇1 ... 第一選擇:選擇與內部聯接

$rs = "SELECT * 
     FROM `player` 
     WHERE `status`=1 AND `credit`>=1 AND `username` NOT LIKE '$user' 
     ORDER BY ls ASC,credit DESC 
     LIMIT 0 ,10; 

二:這個球員必須選擇1

$rs2 = "SELECT * 
     FROM `ip_log` 
     WHERE `playerid`='$ui' AND `win`='1' AND `date`='$date' ";` 
+0

如何在這些表相關? –

+1

'INNER JOIN'用於查找具有匹配數據的兩個表中的行。如果你只想打印那些不匹配的行,那麼你不能使用'INNER JOIN'。你可以用'LEFT OUTER JOIN'來完成。 – Barmar

+0

目前還不清楚:除了選擇1中的用戶之外,您是否想爲所有人顯示日誌消息,或者是否希望顯示除​​了選擇2中的日誌消息之外的所有玩家? – Barmar

回答

0

的結果中刪除您可以使用LEFT JOIN此:

這顯示了沒有選擇1的所有人的日誌消息。

SELECT l.* 
FROM ip_log AS l 
LEFT JOIN 
    (SELECT username 
    FROM player 
    WHERE status = 1 AND credit >= 1 AND username NOT LIKE '$user' 
    ORDER BY ls ASC, credit DESC 
    LIMIT 10) AS p 
ON l.player = p.username 
WHERE win = 1 and date = '$date' 
AND p.username IS NULL 

這表明頂端10玩家數據,除了在選擇2

SELECT p.* 
FROM player AS p 
LEFT JOIN ip_log AS l ON l.player = p.username AND l.win = 1 AND l.date = '$date' 
WHERE p.status = 1 AND p.credit >= 1 AND p.username NOT LIKE '$user' 
AND l.player IS NULL 
ORDER BY p.ls ASC, p.credit DESC 
LIMIT 10 

與日誌消息的那些。在這兩種情況下,在第二個表測試柱,用IS NULL使得它在第一個表僅返回的行在第二個表中沒有匹配。見

Return row only if value doesn't exist

0

您可以用左手做JOIN

SELECT player.*,ip_log.* FROM `player` LEFT JOIN `ip_log` ON player.id!=ip_log.playerid GROUP BY player.id 
+0

您是否可以添加更多條件...用於兩個選擇的所有條件 – hamid

+0

您可以輕鬆添加條件。在'ON'之後,只需在第一個條件之後添加它們即可。例如ON player.id!= ip_log.playerid AND player.status ='1' – Mojtaba