将MYSQL查询限制为fetch_assoc()的1结果停止失败

时间:2015-01-29 17:03:02

标签: php mysql

如何将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;


}

3 个答案:

答案 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;


}