我有一张表matches
,其中的行包含体育,地区,国家和联盟等参考ID。我使用LEFT JOIN
来查找实际的联赛名称,因为并非所有比赛都有联盟ID。
我使用以下内容:
$stmt = $mysqli->prepare("
SELECT leagues.name, matches.league
FROM matches
LEFT JOIN leagues
ON leagues.short = matches.league
WHERE leagues.lang = ? AND matches.sport = ? AND matches.region = ? AND matches.country = ?
ORDER BY leagues.name ASC");
$stmt->bind_param('ssss',$lang,$sport_short,$region_short,$country_short);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($league,$league_short);
如果我此时使用var_dump($league)
或var_dump($league_short)
,我会看到NULL
值。但是,在我尝试使用while ($stmt->fetch) {...}
获取行时,没有包含NULL
的行,我缺少什么?
答案 0 :(得分:0)
在您的查询leagues.lang
中,如果找不到匹配项,也会NULL
,然后它会被WHERE
子句过滤掉。
因此,您可以删除leagues.lang = ?
子句中的WHERE
,也可以将其修改为以下内容:
((leagues.short IS NOT NULL AND leagues.lang = ?) OR leagues.short is NULL)