如何将db查询限制为仅1个结果,以便fetch_assoc()不会失败。限制1似乎不起作用,我得到的错误和PHP函数与下面的SQL。
警告:mysqli :: query():( 21000/1242):子查询在第463行的/class.php中返回多行
致命错误:在第465行的/class.php中的非对象上调用成员函数fetch_assoc()
public function getLastTimeStampStatusChanged($column) {
$sql = "select max(`timeStamp`) from `status` where `".$column."` !=(select `".$column."` from `status` where `timeStamp` = (select max(`timeStamp`) from `status` LIMIT 1))";
while (!$query) {
$query = $this->db->query($sql);
while ($row = $query->fetch_assoc()) {
$result[] = $row;
}
}
return $result;
}
答案 0 :(得分:1)
简短的回答是,您需要在SELECT列表中没有聚合的查询中使用LIMIT子句。最低限度的解决方案是移动一个关闭的工作......
改变这个:
... from `status` LIMIT 1))
^
到此:
... from `status`) LIMIT 1)
^
答案越长,这可能不会返回您想要的结果,因为这将返回一些行,而不是任何确定的行。
答案 1 :(得分:0)
错误消息为您提供修复它所需的一切。简单的子查询返回多行。
首先从子查询中删除LIMIT 1
(您正在使用MAX
,因此它只会返回一行)。然后将该限制添加到子查询。
select `".$column."` from `status` where `timeStamp` = (select max(`timeStamp`) from `status`) LIMIT 1
您还应删除while (!$query)
声明。这里没有任何意义。
答案 2 :(得分:0)
应该是这样的
public function getLastTimeStampStatusChanged($column) {
$sql = "select max(`timeStamp`) from `status` where `".$column."` !=(select `".$column."` from `status` where `timeStamp` = (select max(`timeStamp`) from `status` ) LIMIT 1 )";
while (!$query) {
$query = $this->db->query($sql);
while ($row = mysql_fetch_assoc($query)) {
$result[] = $row;
}
}
return $result;
}