当INNER JOIN标准未达到时,循环结果

时间:2014-04-10 06:05:06

标签: php mysql

我有一个SELECT语句,通过几个INNER JOINS连接三个表(结果,下注,用户名)。以下是连接:

INNER JOIN bets b ON a.winner = b.horse 
INNER JOIN users c ON b.username = c.username
WHERE a.twitter_pubstatus = 0 AND a.market = '$win' AND b.type = '$userwin' 
AND a.date_dd = b.dd AND a.date_mm = b.mm GROUP BY a.winner"); 

然后我在下面有一个php while循环,如果所有条件都符合上述条件,则循环所有结果和获胜者。

我正在努力的是,当不满足连接的条件时,我无法获得显示任何结果的循环。例如,在表格a(结果)中,总会有一个赢家每15分钟输入一次,但在表b(投注)中可能没有与该赢家匹配的赌注。所以:

INNER JOIN bets b ON a.winner = b.horse

会摔倒。

我想要的是什么:

  1. 如果一切正确匹配,则遍历所有获胜者,包括用户名。这有效。

  2. 如果b.horse不存在则意味着没有人赢了所以我需要它才能显示结果。我无法开始工作,如果没有获奖者,如何才能显示所有结果?

  3. 提前致谢

1 个答案:

答案 0 :(得分:1)

您必须使用LEFT JOIN来获取没有匹配项的行。

SELECT *
FROM results a
LEFT JOIN bets b ON a.winner = b.horse AND b.type = '$userwin' AND a.date_dd = b.dd AND a.date_mm = b.mm
LEFT JOIN users c ON b.username = c.username
WHERE a.twitter_pubstatus = 0 AND a.market = '$win'
GROUP BY a.winner

如果b.horse不存在,则bets中的列将为NULL