获取 Zend 1 中先前存在的 MySQL 行
Get previous existing MySQL row in Zend 1
我的问题与获取数据库中的下一个现有 ID 有关。
虽然找到下一个元素效果很好:
$this->view->next = $images->fetchRow($images->select()->where('id > ?', $imageId));
我找不到上一个元素:
$this->view->prev = $images->fetchRow($images->select()->where('max(id) < ?', $imageId));
我总是得到:
SQLSTATE[HY000]: General error: 1111 Invalid use of group function
你能帮我解决这个问题吗?
感谢您的帮助。
恐怕您误用了 max 子句,因为它不能在 where 子句中,而是在 select.
最简单的方法是使用 subselects,即:
$select = $images->select(true)
->reset(Zend_Db_Select::COLUMNS)
->columns(array(
'MAX(id)'
))->where('id < ?', $imageid);
$this->view->prev = $images->fetchRow(
$images->select()
->where('id = ?', $select);
这将生成如下子句:
SELECT `tablename`.* FROM `tablename` WHERE (id = (SELECT MAX(id) FROM `tablename` WHERE (id < 17)));
但我认为最好的方法不是使用subselect 也不是MAX 子句,而是顺序和限制。您将按 id 降序排列查询的所有行结果,然后 select 仅第一个:
$this->view->prev = $images->fetchRow(
$images->select()
->where('id < ?', $imageid)
->order('id DESC')
->limit(1);
这将生成:
SELECT
`tablename`.*
FROM
`tablename`
WHERE
(id < 17)
ORDER BY id DESC
LIMIT 1
这会给你相同的行。
希望对您有所帮助! :)
您正在尝试在 WHERE 子句 中编写 AGGREGATE 函数(MAX) MySQL 数据库中不允许。您需要将您的条件放入 HAVING() 子句 以解决您得到的错误(组函数的无效使用)。
尝试做类似的事情:
$this->view->prev = $images -> fetchRow($images -> select()
-> group('id')
-> having('MAX(id) < ?', $id)
-> order("id DESC") );
我的问题与获取数据库中的下一个现有 ID 有关。 虽然找到下一个元素效果很好:
$this->view->next = $images->fetchRow($images->select()->where('id > ?', $imageId));
我找不到上一个元素:
$this->view->prev = $images->fetchRow($images->select()->where('max(id) < ?', $imageId));
我总是得到:
SQLSTATE[HY000]: General error: 1111 Invalid use of group function
你能帮我解决这个问题吗? 感谢您的帮助。
恐怕您误用了 max 子句,因为它不能在 where 子句中,而是在 select.
最简单的方法是使用 subselects,即:
$select = $images->select(true)
->reset(Zend_Db_Select::COLUMNS)
->columns(array(
'MAX(id)'
))->where('id < ?', $imageid);
$this->view->prev = $images->fetchRow(
$images->select()
->where('id = ?', $select);
这将生成如下子句:
SELECT `tablename`.* FROM `tablename` WHERE (id = (SELECT MAX(id) FROM `tablename` WHERE (id < 17)));
但我认为最好的方法不是使用subselect 也不是MAX 子句,而是顺序和限制。您将按 id 降序排列查询的所有行结果,然后 select 仅第一个:
$this->view->prev = $images->fetchRow(
$images->select()
->where('id < ?', $imageid)
->order('id DESC')
->limit(1);
这将生成:
SELECT
`tablename`.*
FROM
`tablename`
WHERE
(id < 17)
ORDER BY id DESC
LIMIT 1
这会给你相同的行。
希望对您有所帮助! :)
您正在尝试在 WHERE 子句 中编写 AGGREGATE 函数(MAX) MySQL 数据库中不允许。您需要将您的条件放入 HAVING() 子句 以解决您得到的错误(组函数的无效使用)。
尝试做类似的事情:
$this->view->prev = $images -> fetchRow($images -> select()
-> group('id')
-> having('MAX(id) < ?', $id)
-> order("id DESC") );