我有稍微不同的选择查询从同一个表中读取数据。
select user_id
, SUM(credit_movement) as testing_fees
from transactions
where `type` in ('Testing', 'Testing Data')
and `user_id` in (118,124,352 ...)
group by `user_id`
select user_id, SUM(credit_movement) as production_fees
from `transactions`
where `type` in ('Production', 'Production Data') and `user_id` in (152,521,1341, ...)
group by `user_id`
type
和user_id
正在更改。
在Laravel中,我最终为每种类型使用了1个查询,但是有10种类型,这意味着10 db连接——这不好。
$values['testing_fees'] = \DB::table("transactions")
->select(\DB::raw("user_id, SUM(credit_movement) as testing_fees"))
->whereIn('type', ["Testing", "Testing Data"])
->whereIn('user_id', $userIdsToBeUsed)
->whereDate('created_at', '>=', $fromDate->toDateString())
->whereDate('created_at', '<=', $toDate->toDateString())
->groupBy('user_id')
->get();
$values['production_fees'] = \DB::table("transactions")
->select(\DB::raw("user_id, SUM(credit_movement) as production_fees"))
->whereIn('type', ["Production", "Production Data"])
->whereIn('user_id', $userIdsToBeUsed)
->whereDate('created_at', '>=', $fromDate->toDateString()) // this is common
->whereDate('created_at', '<=', $toDate->toDateString()) // this is common
->groupBy('user_id') // this is common
->get();
将这些查询合并到一个查询中,以便建立一个数据库连接以获取所有数据的好方法是什么?
(我正在寻找Laravel查询生成器实现这一点的方法)
如果您想避免关于哪个是哪个的混淆,您可以使用第三个键来告诉您正在处理的数据类型。查看Laravel文档
,您的代码应该如下所示:
<?php
$values['testing_fees'] = \DB::table("transactions")
->select(\DB::raw("user_id, SUM(credit_movement) as testing_fees,'testing as type'"))
->whereIn('type', ["Testing", "Testing Data"])
->whereIn('user_id', $userIdsToBeUsed)
->whereDate('created_at', '>=', $fromDate->toDateString())
->whereDate('created_at', '<=', $toDate->toDateString())
->groupBy('user_id');
$values['production_fees'] = \DB::table("transactions")
->select(\DB::raw("user_id, SUM(credit_movement) as production_fees,'production' as type"))
->whereIn('type', ["Production", "Production Data"])
->whereIn('user_id', $userIdsToBeUsed)
->whereDate('created_at', '>=', $fromDate->toDateString()) // this is common
->whereDate('created_at', '<=', $toDate->toDateString()) // this is common
->groupBy('user_id'); // this is common
// and so on for $values
$query = array_shift($values);
foreach($values as $key => $sub_query){
$query->union($sub_query);
}
$data = $query->get();
dd($data);
注:-
您可以使用UNION关键字:https://www.w3schools.com/sql/sql_ref_union.asp
因此,组合查询将如下所示:
select user_id
, SUM(credit_movement) as testing_fees
from transactions
where `type` in ('Testing', 'Testing Data')
and `user_id` in (118,124,352 ...)
group by `user_id`
UNION
select user_id, SUM(credit_movement) as production_fees
from `transactions`
where `type` in ('Production', 'Production Data') and `user_id` in (152,521,1341, ...)
group by `user_id`
如果需要允许复制,请使用UNION ALL
而不是UNION
问题内容: 我有3个查询已经达到我的SQL知识(如果重要的话,Microsoft SQL 2005)的顶峰-现在我需要将它们组合成一个查询,并将所有值都放在一行中。 我的实际查询如下,但是我认为如果在此处提供一个简单的版本会更容易: 查询一: 查询一个样本输出: 查询二: 查询两个样本输出: 查询三: 查询三个样本输出: 我曾尝试通过父SELECT语句(其中包括此Web链接的详细信息,并为每个
我编写了一个查询,用于查找特定班级中某一性别的学生人数,但我无法找到一种方法来编写可以对两种性别执行相同操作的查询。我尝试编写两次查询(针对每个性别),然后使用UNION将它们组合起来,但也无法做到这一点。 查询# 1 结果: 查询#2 结果: 我希望输出如下,最好使用一个查询: 谢谢你。
本文向大家介绍MySQL查询为表中的值设置不同的组合?,包括了MySQL查询为表中的值设置不同的组合?的使用技巧和注意事项,需要的朋友参考一下 让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 这是对MySQL组合的查询- 这将产生以下输出-
我只是在Spring数据中偶然发现了一些意想不到的行为。为了演示我设置了一些Spring Boot应用程序,其中添加了JPA、Web、H2https://start.spring.io/。 该应用程序包含两个表和一些数据: data.sql: 这个表结构只有一个模型,因为两个表的结构都是一样的。我为这个表创建了一个JpaRepository 示例DAO: 最后我添加了一个控制器(TestContr
我使用嵌套的Select语句从表1中获得单行结果,我需要在同一行的末尾追加表3中的另一列(COLX)。我试过联合,但结果是两行。有什么建议吗? table2.colz和table3.colx是用来匹配条目的ID。这两个最终结果都符合要求。 编辑(进一步解释我的表结构) COLX是表3的ID,以匹配表2中的COLZ 表2 ID中的COL1与表1中的COL1匹配 结果我需要的是表1.col1,表1.c
我正试图创建一个产品清单使用谷歌表。每种类型的产品都有许多属性(或变体),这些属性组合在一起可以创建单个产品。 例如,有 直径:1/4英寸、1/2英寸、3/4英寸等。 长度:1/2英寸、1英寸、1/2英寸等 材料:钢、不锈钢 等等 特定产品是这些变化的特定组合。例如: 1/4英寸X 1/2英寸钢制圆头方颈螺栓 我要做的是创建一系列只包含属性的列。因此,直径柱、长度柱、材料柱等。 然后,我想通过将这