php mysqli fetch_assoc忽略左连接

时间:2015-11-21 15:51:01

标签: php mysqli left-join

我遇到了问题,不知道为什么我的mysqli查询在PHP中无法正常工作。

我有两张桌子:

table 1 "reviews"
id | dateCreated | reviewText | ...

table 2 "issues"
id | reviews_id | issueText | ...

表1包含来自用户的评论。表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
if($result = $this -> mysqli -> query($qstr)){
    while($row = $result->fetch_assoc()){
        $temp[] = $row;
        }
}

$ row中缺少问题的所有其他列,因为它们是NULL。丢失我的意思是,如果我在netbeans调试器中打印$ row或检查$ row作为监视变量,它们就不在那里。它只是没有显示reviews.id和issues.reviews_id。

如果我直接在phpmyadmin中运行上面的查询,那么它会在没有找到相关问题的情况下正确返回所有列,值为NULL。

所以我的问题是,为什么PHP会忽略NULL值并且不会在$ row中返回它们但是phpmyadmin呢?

谢谢!

1 个答案:

答案 0 :(得分:2)

这是我在更多描述性信息中的评论,以防将来有人遇到这种情况。

当您调用fetch_assoc时,将列名称指定为键和&它们的值作为数组的值,因为数组的键是唯一的,任何具有相同id的条目都将被覆盖。

在您的示例中,两个评论&问题有一个名为' id'因此,您始终可以从最后一个ID中获取价值。您在select语句中使用的列。

对此的简单修复(无需永久更改列名称)是在查询中使用别名。 例如:SELECT reviews.*, issues.id as `issue_id`, issues.issueText