我只是想知道,如何检索表中不存在的行并将其返回为 NULL?
简介
例如,在下面的代码中,它只会返回 Skill_players 中存在的数据,这不是我想要的结果。我想要的结果是,输出现有数据以从 skill_players 获取其值(如果不存在),然后将该值输出为 NULL,以便我可以使用IFNULL 供以后使用。
表格设计
当前结果
[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
表中给定用户没有的任何记录。相反,您希望显示每条技能记录,无论用户是否拥有该技能。
关于php - JOINED 时将不存在的行检索为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47965224/