Я просто хочу знать, как я могу получить несуществующую строку в таблице и вернуть ее как NULL?
краткое
Например, в приведенном ниже коде он будет возвращать только данные, которые существуют в skill_players, что не является результатом, который я хочу. Я хочу, чтобы результат состоял в том, чтобы вывести существующие данные, чтобы иметь их значение от skill_players, если этого не существует, тогда выведите значение как NULL, чтобы я мог использовать IFNULL для последующих целей.
Дизайн стола
таблица skills_type
таблица skill_players
Текущий результат
[Skill Name] | [Value]
TotalStoreRobbed | 8
Ожидаемый результат
[Skill Name] | [Value]
TotalRape | NULL
TotalBeenRaped | NULL
TotalRob | NULL
TotalBeenRobbed | NULL
TotalStoreRobbed | 8
TotalCuffEscape | NULL
TotalArrest | NULL
TotalBeenArrested | NULL
Код
//fetching item data
$query =
"
SELECT
skill.value, type.skill_name
FROM
skills_player AS skill
LEFT JOIN
skills_type AS type
ON
skill.fk_skill_id = type.skill_id
WHERE
skill.fk_user_id = ?
";
if($stmt = $sqlHandle->prepare($query))
{
$stmt->bind_param("i", $acc_ID);
$stmt->execute();
$res = $stmt->get_result();
$skills = null;
if($res->num_rows > 0) {
while($row = $res->fetch_assoc()) {
$skills[] = $row;
print_r($row);
}
}
}
else {
$error = $sqlHandle->errno . ' ' . $sqlHandle->error;
echo $error;
}
Спасибо, Патрик!
Переместите WHERE
предложение ON
и измените порядок соединения. Левые объединяют навыки игроков, сохраняя при этом все навыки.
SELECT
skill.value, type.skill_name
FROM
skills_type AS type
LEFT JOIN
skills_player AS skill
ON
skill.fk_skill_id = type.skill_id AND
skill.fk_user_id = ?
Проблема с вашим текущим запросом заключается в том, что, хотя он использует LEFT JOIN
, он будет отбрасывать любые записи в таблице skills_player
которую данный пользователь не имеет. Вместо этого вы хотите показать каждую запись умения, независимо от того, имеет ли пользователь этот навык.
WHERE
предложениюON
объединяет данные, которые даже не связаны с этим конкретным user_id, хотя он возвращает NULL, но в строку, не связанную с user_id. Если я не достаточно ясно, я пытаюсь загрузить все эти поля из skill_type, существуют ли они в skill_players, если они существуют, вернуть значение из поля, и если они не существуют, вернутьNULL
в качестве значения.