使用连接语句和子查询准备 CakePHP 查询
Posted
技术标签:
【中文标题】使用连接语句和子查询准备 CakePHP 查询【英文标题】:CakePHP query preparation with join statement and subquery 【发布时间】:2013-10-08 10:48:28 【问题描述】:我正在学习 Cakephp,但在操作更复杂的数据库查询时遇到了很大的问题。 所以我想执行那种查询:
SELECT p.name, b.value
FROM books b LEFT JOIN projects p
ON b.project_id=p.id
WHERE b.created=
(SELECT max(b.created) FROM books b WHERE b.user_id=1)
AND b.user_id=1
GROUP BY p.name
谁能帮我用 cakePHP 机制来准备查询?
【问题讨论】:
您是否尝试在带有此 SQL 语句的 Book 模型上使用 find() 方法? 【参考方案1】:您的代码应该与此类似,假设 Book e Project 有关系 (Book
belongsTo Project
)
$this->Book->find
(
'all',
array
(
'fields' => array('Book.value', 'Project.name'),
'conditions' => array
(
'Book.created IN (SELECT MAX(Book.created) FROM books Book WHERE Book.user_id = 1)',
'Book.user_id' => 1
),
'group' => 'Project.name'
)
);
【讨论】:
太好了,我想这是我一直在寻找的东西 :) 谢谢【参考方案2】:使用 IN 子句。
SELECT p.name, b.value
FROM books b
LEFT JOIN projects p ON b.project_id=p.id
WHERE b.created IN (SELECT max(created) FROM books WHERE user_id=1)
AND b.user_id=1
GROUP BY p.name
【讨论】:
【参考方案3】:如果Book和Projects都是Models,可以直接使用Book模型通过CakePHP函数加入,参考https://***.com/a/16286735/2858188
【讨论】:
以上是关于使用连接语句和子查询准备 CakePHP 查询的主要内容,如果未能解决你的问题,请参考以下文章
选择带有“is null”子句的查询和子选择/左连接不返回结果