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)