当前位置: 首页 > 面试题库 >

Cakephp中的UNION语法

楚皓君
2023-03-14
问题内容

有人知道在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

问题答案:

太多的编码人员试图将自己局限于框架的功能。别。使用框架提供的内容。如果它不具有您想要的功能,则可以:

  • 将所需的功能编码到类扩展中

要么

  • 在框架内自定义代码以适应您的需求。

通常,开发人员试图将一个方形钉锤入一个圆孔中,然后进行过多的额外工作,这实际上只会使代码变得复杂。退后一步,问一问为什么要使用该框架。它使结构成为一种非结构化的语言。它为构建您的应用程序提供了坚实的可重用基础。并不是要成为一个让自己陷入困境的盒子。

更新:我花了一点时间阅读“ 复杂查找条件”并找到了答案:

$joins = array(
    array(
        'table' => 'test_twos',
        'alias' => 'TestTwo',
        'type' => 'LEFT',
        'conditions' => array(
            'TestTwo.id = TestOne.id',
        )
    ),
    array(
        'table' => 'test_threes',
        'alias' => 'TestThree',
        'type' => 'LEFT',
        'conditions' => array(
        'TestThree.id = TestOne.id',
    )
    )
);

$dbo = $this->getDataSource();
$subQuery = $dbo->buildStatement(
    array(
        'fields' => array('*'),
        'table' => $dbo->fullTableName($this),
        'alias' => 'TestOne',
        'limit' => null,
        'offset' => null,
        'joins' => $joins,
        'conditions' => null,
        'order' => null,
        'group' => null
    ),
    $this->TestOne
);
$query = $subQuery;

$query .= ' UNION ';
$joins = array(
    array(
        'table' => 'test_twos',
        'alias' => 'TestTwo',
        'type' => 'LEFT',
        'conditions' => array(
            'TestTwo.id = TestOne.id',
        )
    ),
    array(
        'table' => 'test_threes',
        'alias' => 'TestThree',
        'type' => 'RIGHT',
        'conditions' => array(
        'TestThree.id = TestOne.id',
        )
    )
);

$dbo = $this->getDataSource();
$subQuery = $dbo->buildStatement(
    array(
    'fields' => array('*'),
    'table' => $dbo->fullTableName($this),
    'alias' => 'TestOne',
    'limit' => null,
    'offset' => null,
    'joins' => $joins,
    'conditions' => null,
    'order' => null,
    'group' => null
    ),
    $this->TestOne
);

$query .= $subQuery;

pr($query);


 类似资料:
  • 由于 C 语言是强类型语言,不能如同某些语言一样,可以在变量中存储任意元素。所以在有的时候会遇到一些问题。比如你有一个变量需要存储计算结果,计算结果有时可能是整数,有时可能是浮点数。这里我们介绍其中可以做到不更改变量名就可以存储不同类型数据的变量。 1. 声明 union 和之前介绍的 struct 的声明方式是类似的,通过关键字 union ,以及这个 union 的名称,还有一系列的变量类型以

  • 问题内容: 如何在SQL / MySQL中的UNION之后应用WHERE语句? 问题答案: 如果要将WHERE子句应用于UNION的结果,则必须将UNION嵌入到FROM子句中: 我假设TableA和TableB是联合兼容的。当然,您也可以将WHERE子句应用于UNION中的每个单独的SELECT语句。

  • 本文向大家介绍cakephp打印sql语句的方法,包括了cakephp打印sql语句的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了cakephp打印sql语句的方法。分享给大家供大家参考。具体实现方法如下: 将以下语句复制到你的代码中,可以打印出在这之前所有的sql语句: 希望本文所述对大家基于cakePHP框架的php程序设计有所帮助。

  • 我试图联合所有大约20个表合并成一个单一的视图。我不断得到一个错误,该错误声明: 如果我将该列注释掉,可以很好地工作。 我尝试将所有列强制转换为相同的数据类型,但没有成功。 我试着注释掉有问题的专栏,这很有效,但我需要那个专栏。 我只尝试了几个表的联合,这取决于文档类型,有时有效,有时无效。

  • 有谁对蛋糕1.3的多语言设置有很好的了解吗? 今天,我用的是一个/locale/nor/LC_MESSAGES/default。po 标题: 以及其中的常规语言字符串。 在引导中。php= 像这样简单的字符串; 翻译为ok,但是,如果我使用复数(表示时间助手) 这些都没有翻译!?! 我不知道还能做什么,因为我已经手动创建了。编辑器中的po文件(不使用控制台或其他方式提取) 我还需要包括一些其他内容

  • 问题内容: 我有一个小查询,并在其旁边放了一个联合查询。但是,联合中存在语法错误。 这是我收到的错误 问题答案: 我知道出了什么问题。您必须在查询的末尾且仅在末尾下订单。它给了我一个错误,因为它认为查询已结束。 做到了。