PHP с извлечением MySQLi не возвращает строки с NULL в LEFT JOIN

У меня есть стол matches со строками, содержащими идентификаторы ссылок для спорта, регионов, стран и лиг среди прочего. я использую LEFT JOIN чтобы найти фактическое название лиги, потому что не все матчи имеют идентификатор лиги.

Я использую следующее:

$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 ответ

Решение

По вашему запросу leagues.lang также будет NULL если совпадение не найдено, то оно будет отфильтровано WHERE пункт.

Так что вы можете бросить leagues.lang = ? в WHERE или вы можете изменить его на что-то вроде этого:

((leagues.short IS NOT NULL AND leagues.lang = ?) OR leagues.short is NULL)
Другие вопросы по тегам