Php 不满足内部联接条件时的循环结果
我有一个SELECT语句,它通过几个内部连接将三个表结果、赌注、用户名连接起来。以下是连接:Php 不满足内部联接条件时的循环结果,php,mysql,Php,Mysql,我有一个SELECT语句,它通过几个内部连接将三个表结果、赌注、用户名连接起来。以下是连接: 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.
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不存在,这意味着没有人赢了,所以我需要它来显示结果。这个我不能去工作,如果没有赢家,我怎么才能让它显示所有的结果呢
提前感谢您必须使用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的列将为空。内部联接仅生成具有匹配项的行。如果您想要不匹配的行,则必须使用左连接。在while循环中,我可以使用:If$horse==NULL{horse在前面定义为$horse=$row['horse'];但我想使用来自表结果的SELECT语句中的一些字段。这可能吗?结果中的所有字段都将在那里。只有来自bets和users的字段将为NULL。如果horse==NULL,我无法让它显示任何内容。数据库中有6个结果应该显示,因为它们在bets表中不匹配。不是suWhat’如果你说结果中的所有字段都应该在那里,那么当$horse为空时,当你打印$row['winner']时你会看到什么呢?如果你只是从mysql命令行工具或phpMyAdmin手动运行查询,而不是从PHP运行查询,会怎么样?