【问题标题】:SQL query laravel syntaxSQL 查询 laravel 语法
【发布时间】:2018-09-13 12:04:36
【问题描述】:

我该如何查询:

SELECT *, due1 as newDate FROM equipments WHERE due1 <> "1990-01-01" 
UNION ALL 
SELECT *, due2 as newDate FROM equipments where due2 <> "1990-01-01"
UNION ALL 
SELECT *, due3 as newDate FROM equipments WHERE due3 <> "1990-01-01" 
ORDER BY newDate ASC 

在 Laravel 中?

【问题讨论】:

标签: php sql laravel laravel-query-builder


【解决方案1】:

如果您查看 unions 下的 Laravel 文档,您可以创建多个选择语句,最后一个语句使用 union() 函数和/或 unionAll() 函数

【讨论】:

  • 很好,特雷弗,谢谢你...使用 unionAll()
【解决方案2】:

如上所述,解决方案是 unionAll() 语句:

$TMUDue = Equipments::Where('due1', '<>', '1990-01-01')
                                ->select('*', 'due1 AS newDate');
$CalDue = Equipments::Where('due2', '<>', '1990-01-01')
                                ->select('*', 'due2 AS newDate');
$SerDue = Equipments::Where('due3', '<>', '1990-01-01')
                                ->select('*', 'due3 AS newDate');
$equipmentsDue = $SerDue->unionAll($CalDue)->unionAll($TMUDue)->orderBy('newDate' , 'ASC')->get();

有趣的是,尽管due1due2&lt;&gt; 1990-01-01unionAll() 导致此示例中同一设备的两个条目,但union() 仅结果是单一的。

正是我想要的。感谢您的回复!

【讨论】:

  • 原因是 UNION 基本上是一个集合操作,并且集合具有明确定义的不同项,因此 union 不包含任何重复项。
猜你喜欢
  • 2015-01-08
  • 1970-01-01
  • 1970-01-01
  • 2018-01-27
  • 2017-04-17
  • 1970-01-01
  • 2010-10-29
  • 2012-07-29
  • 1970-01-01
相关资源
最近更新 更多