php mysqli fetch_assoc 忽略左连接的空值
php mysqli fetch_assoc ignores null values for left join
我有一个问题,不知道为什么我的 mysqli 查询在 PHP.
中不能正常工作
我有两个表:
table 1 "reviews"
id | dateCreated | reviewText | ...
table 2 "issues"
id | reviews_id | issueText | ...
Table 1 条包含来自用户的评论。 Table 2 包含某些评论的问题(投诉)。然而,一篇评论不一定需要有问题(如果没有人报告)。查询是:
SELECT reviews.*, issues.*
FROM reviews
LEFT JOIN issues
ON reviews.id=issues.reviews_id
WHERE (reviews.idVenue='6438' OR reviews.idVenue='6444' OR reviews.idVenue='7590' )
ORDER BY 'reviews.updated' DESC
如果存在一个问题需要审核(ON 条款为真),这将非常有效。
但是,如果审查不存在问题(ON 子句不正确),则 reviews.id 和 issues.reviews_id 在使用 [=15= 获取的 $row 中丢失]
if($result = $this -> mysqli -> query($qstr)){
while($row = $result->fetch_assoc()){
$temp[] = $row;
}
}
此外,问题中的所有其他列在 $row 中都丢失了,因为它们是 NULL。缺少我的意思是,如果我在 netbeans 调试器中打印 $row 或将 $row 检查为监视变量,它们将不存在。它只是不显示 reviews.id 和 issues.reviews_id.
如果我 运行 上面的查询直接在 phpmyadmin 中,那么它 return 在没有找到相关问题进行审查的情况下,所有列都正确地使用值 NULL。
所以我的问题是,为什么 PHP 会忽略 NULL 值并且不会 return 它们在 $row 中,而 phpmyadmin 会?
谢谢!
这是我在更多描述性信息中的评论,以防将来有人遇到此问题。
当您调用 fetch_assoc php 时,将列名指定为键,并将它们的值指定为数组的值,因为数组的键是唯一的,任何具有相同 ID 的条目都将是覆盖。
在您的示例中,评论和问题都有一个名为 'id' 的列,因此您将始终从您在 select 语句中使用的最后一个 'id' 列中获取值。
一个简单的解决方法(无需永久更改列名)是在查询中使用别名。
例如:SELECT reviews.*, issues.id as `issue_id`, issues.issueText
我有一个问题,不知道为什么我的 mysqli 查询在 PHP.
中不能正常工作我有两个表:
table 1 "reviews"
id | dateCreated | reviewText | ...
table 2 "issues"
id | reviews_id | issueText | ...
Table 1 条包含来自用户的评论。 Table 2 包含某些评论的问题(投诉)。然而,一篇评论不一定需要有问题(如果没有人报告)。查询是:
SELECT reviews.*, issues.*
FROM reviews
LEFT JOIN issues
ON reviews.id=issues.reviews_id
WHERE (reviews.idVenue='6438' OR reviews.idVenue='6444' OR reviews.idVenue='7590' )
ORDER BY 'reviews.updated' DESC
如果存在一个问题需要审核(ON 条款为真),这将非常有效。
但是,如果审查不存在问题(ON 子句不正确),则 reviews.id 和 issues.reviews_id 在使用 [=15= 获取的 $row 中丢失]
if($result = $this -> mysqli -> query($qstr)){
while($row = $result->fetch_assoc()){
$temp[] = $row;
}
}
此外,问题中的所有其他列在 $row 中都丢失了,因为它们是 NULL。缺少我的意思是,如果我在 netbeans 调试器中打印 $row 或将 $row 检查为监视变量,它们将不存在。它只是不显示 reviews.id 和 issues.reviews_id.
如果我 运行 上面的查询直接在 phpmyadmin 中,那么它 return 在没有找到相关问题进行审查的情况下,所有列都正确地使用值 NULL。
所以我的问题是,为什么 PHP 会忽略 NULL 值并且不会 return 它们在 $row 中,而 phpmyadmin 会?
谢谢!
这是我在更多描述性信息中的评论,以防将来有人遇到此问题。
当您调用 fetch_assoc php 时,将列名指定为键,并将它们的值指定为数组的值,因为数组的键是唯一的,任何具有相同 ID 的条目都将是覆盖。
在您的示例中,评论和问题都有一个名为 'id' 的列,因此您将始终从您在 select 语句中使用的最后一个 'id' 列中获取值。
一个简单的解决方法(无需永久更改列名)是在查询中使用别名。
例如:SELECT reviews.*, issues.id as `issue_id`, issues.issueText