带有MySQLi fetch的PHP在LEFT JOIN

时间:2016-08-05 19:44:55

标签: php mysql sql mysqli

我有一张表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的行,我缺少什么?

1 个答案:

答案 0 :(得分:0)

在您的查询leagues.lang中,如果找不到匹配项,也会NULL,然后它会被WHERE子句过滤掉。

因此,您可以删除leagues.lang = ?子句中的WHERE,也可以将其修改为以下内容:

((leagues.short IS NOT NULL AND leagues.lang = ?) OR leagues.short is NULL)