【发布时间】:2010-08-21 03:07:48
【问题描述】:
谁知道在 CakePHP 中进行 UNION 查询的好方法?我想避免使用$this->query();。
有两个表t1,t2:
SELECT * FROM t1
LEFT JOIN t2 ON t1.id = t2.id
UNION
SELECT * FROM t1
RIGHT JOIN t2 ON t1.id = t2.id
三个表t1、t2、t3:
SELECT * FROM t1
LEFT JOIN t2 ON t1.id = t2.id
LEFT JOIN t3 ON t2.id = t3.id
UNION
SELECT * FROM t1
RIGHT JOIN t2 ON t1.id = t2.id
LEFT JOIN t3 ON t2.id = t3.id
UNION
SELECT * FROM t1
RIGHT JOIN t2 ON t1.id = t2.id
RIGHT JOIN t3 ON t2.id = t3.id
【问题讨论】:
-
您是否有任何理由希望避免使用 $this->query?
-
好吧,首先,如果您不打算尝试以框架的本机样式编写应用程序,那么它就违背了使用框架的目的。而大多数
SELECT查询实际上可以在1.3 中使用find()执行。此外,find()受益于数据源驱动程序对 SQL 注入的内置保护,而query()是您必须自己逃避的直接查询。也就是说,UNION可能是您无法使用find()执行的少数几类查询之一。 -
您是否有正在运行的有效 MySQL 联合示例?列出的那个不起作用。
-
我认为对于框架的目的有些混淆。框架不一定设计为使您的代码跨数据库兼容。此外,您不应将站点的功能限制在框架内的限制范围内。框架旨在将 UI 与域逻辑分开。它还通过引入结构和组织来增强开发,并提供可重用的代码。如果你只做框架允许的事情,你将限制你的能力。
-
@cdburges:我还没有工作示例。事实上我需要做
FULL JOIN但 MySQL 不支持。所以,我认为我不是第一个遇到这个问题的人,可能已经找到了解决方案,因此我发布了这个问题。
标签: php sql mysql cakephp union