我有一个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
会摔倒。
我想要的是什么:
如果一切正确匹配,则遍历所有获胜者,包括用户名。这有效。
如果b.horse不存在则意味着没有人赢了所以我需要它才能显示结果。我无法开始工作,如果没有获奖者,如何才能显示所有结果?
提前致谢
答案 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
。