首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何在蛋糕php中做sql联合?

我如何在蛋糕php中做sql联合?
EN

Stack Overflow用户
提问于 2011-09-15 21:57:25
回答 2查看 6.9K关注 0票数 2

我必须获取模型的所有关联数据。UNION查询基本上如下所示:

代码语言:javascript
复制
  SELECT * FROM `videos` AS `U1` 
  WHERE `U1`.`level_id` = '1' AND `U1`.`submitted_date` > '2011-09-11'
UNION 
  SELECT * FROM `videos` AS `U2`
  WHERE `U2`.`level_id` = '1' AND `U2`.`submitted_date` < '2011-09-11'
  ORDER BY  submitted_date DESC
  LIMIT 0,10

因此,当我使用$this->Video->find('all')-->时,我会得到所有关联表数据的结果。

现在我想使用UNION SQL查询,它也应该返回关联表数据……

你知道如何使用蛋糕内置函数来获取数据吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-16 00:18:42

你可以用4种或更多不同的方式来实现这一点……最简单但不推荐的方法是使用

代码语言:javascript
复制
$this->Model->query($query); 

其中$query是上面提到的查询。

第二种方法可能不是您想要的,那就是重做sql查询,您将得到相同的结果(但不会用别名分隔),如下所示:

代码语言:javascript
复制
SELECT * FROM `videos` AS `U1` 
WHERE `U1`.`level_id` = '1' AND (`U1`.`submitted_date` > '2011-09-11' OR `U1`.`submitted_date` < '2011-09-11')
ORDER BY  submitted_date DESC
LIMIT 0,10

使用find可以很容易地完成这个查询,如下所示

代码语言:javascript
复制
$conditions = array(
    'Video.level_id'=>1,
    'OR' => array(
        'Video.submitted_date <'=> '2011-09-11',
        'Video.submitted_date >'=> '2011-09-11'
    )
);
$this->Video->find('all', array('conditions'=>$conditions)) 

第三种方法是阿巴·布莱恩特谈到的方法,这里详细解释了直接构建声明的Union syntax in cakePhp

第四种方法不太喜欢第一种方法,你必须创建一个具有beforeFind函数的行为,在那里你必须检查是否有一个选项联合并创建查询,或者创建类似第三个选项的东西。

您将使用如下所示的find调用它

代码语言:javascript
复制
$this->Video->find('all', array('conditions'=>$conditions, 'union'=> $union));

这将是一些更不像可链接或可包含行为的东西。

第二种方法是修改您的cakephp sql驱动程序...这一次,我真的不知道你需要做哪些改变,但它是一种实现这一点的方法……这些驱动程序负责解释和创建查询,连接到数据库并执行查询...

请记住,cakephp发现做检查是必要的,以防止SQLInyection和其他风险。$model->query不会执行此测试,因此要小心

票数 4
EN

Stack Overflow用户

发布于 2011-09-15 23:00:24

这里的问题使用连接和一些直接的数据源访问来构建一个联合查询,该查询可以通过find方法使用。

这是一项工作,代码不会100%适合你-你必须修改它-但它应该让你入门。

UNION syntax in Cakephp

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7432065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档