如何将db查询限制为一个结果,这样fetch_assoc()就不会失败。限制1似乎不起作用,我得到的错误和下面sql中的php函数。
警告: mysqli::query():(21000/1242):子查询在第463行的/class.php中返回超过1行
致命错误:在第465行调用非对象上的成员函数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;
}
发布于 2015-01-29 09:11:30
简单地说,您需要在没有选择列表中的聚合的查询上使用LIMIT子句。最小的解决办法是移动一个关闭的帕伦.
改变这一点:
... from `status` LIMIT 1))
^
对此:
... from `status`) LIMIT 1)
^
更长的答案是,这可能不会返回您想要的结果,因为这将只返回一些行,而不是任何确定的行。
发布于 2015-01-29 09:06:41
错误消息提供了修复它所需的一切。简单地,您的子查询返回多行。
首先,从子查询中删除LIMIT 1
(您使用的是MAX
,因此它只返回一行)。然后将该限制添加到子查询中。
select `".$column."` from `status` where `timeStamp` = (select max(`timeStamp`) from `status`) LIMIT 1
您还应该删除while (!$query)
语句。在这里没有任何意义。
发布于 2015-01-29 09:06:56
应该是这样的
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;
}
https://stackoverflow.com/questions/28220405
复制相似问题