当前位置: 首页 > 知识库问答 >
问题:

使用where子句检索数据时,是否仍要检索计数0?(拉雷维尔口若悬河)

督灿
2023-03-14

我目前正在使用群组检索数据,以获得相同的宝藏名称,总发现和相同的宝藏数量(上限)。使用下面的代码,我可以得到所有的宝藏数据,但是当宝藏被完全认领时,它无法显示total_left是0。

*声明的列是一个布尔值,其中0尚未声明。

查询

$treasure_hunt_data = TreasureHunt::where('claimed', '0')
                        ->selectRaw(" treasure_name, count(claimed) as total_left, cap")
                        ->groupBy(['treasure_name', 'cap'])
                        ->get();

数据

[
    {"treasure_name":"Location A","total_left":5,"cap":5},
    {"treasure_name":"Location B","total_left":2,"cap":2},
    {"treasure_name":"Location C","total_left":2,"cap":2},
    {"treasure_name":"Location D","total_left":10,"cap":10}
]

期望数据

[
    {"treasure_name":"Location A","total_left":5,"cap":5},
    {"treasure_name":"Location B","total_left":2,"cap":2},
    {"treasure_name":"Location C","total_left":2,"cap":2},
    {"treasure_name":"Location D","total_left":10,"cap":10},
    {"treasure_name":"Location E","total_left":0,"cap":1}
]

共有2个答案

贺浩壤
2023-03-14

以下是数据库中的实际记录:

[{"id":1,"name":"Location A","value":1,"total":"10","created_at":null,"updated_at":null},
{"id":2,"name":"Location B","value":1,"total":"220","created_at":null,"updated_at":null},
{"id":3,"name":"Location C","value":1,"total":"42","created_at":null,"updated_at":null},
{"id":4,"name":"Location D","value":0,"total":"23","created_at":null,"updated_at":null},
{"id":5,"name":"Location A","value":1,"total":"233","created_at":null,"updated_at":null}]

尝试此查询以检索数据:

$treasure_hunt_data = TreasureHunt::select(
            'treasure_name',
            \DB::raw('sum(case when claimed = 1 then 1 else 0 end) as total_left'), 
            \DB::raw('sum(cap) as cap')
        )
        ->groupBy('treasure_name')
        ->get();

以下是上述查询的结果:

[{"name":"Location A","total_left":"2","total":243},
{"name":"Location B","total_left":"1","total":220},
{"name":"Location C","total_left":"1","total":42},
{"name":"Location D","total_left":"0","total":23}]
孟佑运
2023-03-14

您可以使用CTE(公共表表达式)和DB::select语句来实现这一点。例如:

$treasure_hunt_data = DB::select("
    with treasure_data as (
        select treasure_name, count(claimed) as total_left, cap
        from treasure_hunt
        where claimed = 0 
        group by treasure_name, cap
    )
    select * from treasure_data where total_left = 0
");

它将以数组的形式返回结果集。

 类似资料:
  • 我试图从我的链接表sfees中获取数据,它由来自学生表的学生id和来自M_费用表的MFEEID组成。我的模型是: M_fees: 现在,我如何检索特定学生的学费(类型和金额)?我在控制器中使用了以下功能: 但它似乎不起作用。 有人能帮我吗?

  • SELECT 语句 是最常用的SQL语句了,用来索引一个或者多个表信息。 关键字(keyword) 作为SQL组成部分的字段,关键字不能作为表或者列的名字。 使用SELECT索引数据,必须至少给出两条信息,想要什么? 从什么地方获取? 检查单个列 SELECT prod_name FROM Products; 解释:使用SELECT 语句从 Products 表中检索一个名为prod_name

  • SELECT语句用于从表中检索数据,通常格式如下: SELECT what_to_select FROM which_table WHERE conditions_to_satisfy; what_to_select 表示你想看到的数据,可以是具体列,也可以是*(代表所有列)。 which_table 表示你要从哪个表中检索数据。 WHERE 是可选的,如果有的话,conditions_to_s

  • 我正在使用使用Tweepy库的Python代码来检索特定主题标签的Twitter数据,但问题是我需要检索特定时期,例如,从2013年6月30日到2013年12月30日。我该怎么做?

  • 在本章中,我们将讨论如何使用Java Client API检索数据。假设有一个名为sample.csv的.csv文档,其中包含以下内容。 可以使用命令在核心-下对此数据编制索引。 以下是向Apache Solr索引添加文档的Java程序代码。将此代码保存在的文件中。 通过在终端中执行以下命令编译上述代码 - 执行上述命令后,将得到以下输出。

  • 缓存项: 内部映射可以有多达25000个元素/桶。redis中有没有一种方法可以根据密钥(redis密钥、外部映射的密钥和内部映射的密钥)从内部映射中检索特定的值,而不必在访问这个redis缓存的Java方法中获取整个redis条目? 当前,如果我必须从内部映射中删除一个特定的键,我会以以下方式进行: