You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中如何从多行数据获取合并后的用户票据数组?

解决方案

1. SQL查询语句(MySQL 8.0+)

如果tickets字段是JSON数组类型(单条投注记录的tickets格式类似[283983, 389239]),可通过以下SQL获取指定日期下各用户的所有票据:

SELECT 
    b.user_id,
    JSON_ARRAYAGG(t.ticket) AS user_tickets
FROM bets b
JOIN JSON_TABLE(
    b.tickets,
    '$[*]' COLUMNS(ticket INT PATH '$')
) t
WHERE b.draw_date = '2024-05-20' -- 替换为目标查询日期
GROUP BY b.user_id;

2. 逻辑说明

  • JSON_TABLE:将每条投注记录中的tickets JSON数组拆分为单行数据,每个票据元素独立成列
  • GROUP BY user_id:按用户ID分组,聚合同一用户的所有票据记录
  • JSON_ARRAYAGG:把同一用户的所有票据元素重新合并为一个JSON数组

3. 应用层转换为目标格式

查询返回的是user_id与对应票据数组的映射关系,可在应用代码中转为以用户ID为键的关联数组,以PHP为例:

// 假设已建立PDO数据库连接
$targetDate = '2024-05-20';
$stmt = $pdo->prepare("SELECT user_id, JSON_ARRAYAGG(t.ticket) AS user_tickets FROM bets b JOIN JSON_TABLE(b.tickets, '$[*]' COLUMNS(ticket INT PATH '$')) t WHERE b.draw_date = ? GROUP BY b.user_id");
$stmt->execute([$targetDate]);

$finalResult = [];
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    $finalResult[$row['user_id']] = json_decode($row['user_tickets'], true);
}

// 输出即为你需要的格式
print_r($finalResult);

内容的提问来源于stack exchange,提问作者Naung Ye Htet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 06:11:16