mysql - mariadb 查询和使用邮递员的不同输出
问题描述
您好,我有一个查询要从数据库返回一个 JSON 值到后端。当我直接从数据库(phpmyadmin)查询它时,它工作正常并且查询返回正确的值。但是当我使用邮递员访问它时,它返回不同的值(它返回 null)
这是 phpmyadmin 查询的结果
{
"name": "Desi Ratnaningsih",
"day": "Monday",
"schedule":
[
{"start": "10:00:00", "end": "13:00:00"},
{"start": "17:00:00", "end": "20:00:00"}
]
}
这是邮递员的结果
{
"name": "Desi Ratnaningsih",
"day": "Monday",
"schedule": null
}
这是我的查询
SELECT DISTINCT JSON_OBJECT(
'name', d.name,
'day', s.day,
'schedule', JSON_EXTRACT((
SELECT CONCAT('[', GROUP_CONCAT( JSON_OBJECT( 'start', h.start, 'end', h.end )) ,']')
FROM hours h JOIN schedules s ON h.id = s.working_hour
JOIN doctors d ON s.doctor_id = d.doctor_id WHERE d.doctor_id =1 AND s.day="Monday"),'$') ) AS data
FROM doctors d JOIN schedules s ON d.doctor_id=s.doctor_id
JOIN hours h on s.working_hour = h.id
WHERE d.doctor_id = 1 AND s.day="Monday";
解决方案
这更简单/正确吗?
SELECT JSON_OBJECT(
'name', d.name,
'day', s.day,
'schedule', JSON_ARRAYAGG( JSON_OBJECT( 'start', h.start, 'end', h.end ))
) AS data
FROM doctors d
JOIN schedules s ON d.doctor_id=s.doctor_id
JOIN hours h on s.working_hour = h.id
WHERE d.doctor_id = 1 AND s.day="Monday"
GROUP BY d.docker_id, s.day;
这需要 MariaDB-10.5。
对于早期版本,GROUP_CONCAT
方法是:
SELECT JSON_OBJECT(
'name', d.name,
'day', s.day,
'schedule', CONCAT('[', GROUP_CONCAT( JSON_OBJECT( 'start', h.start, 'end', h.end ) ) ,']')
) AS data
FROM doctors d
JOIN schedules s ON d.doctor_id=s.doctor_id
JOIN hours h on s.working_hour = h.id
WHERE d.doctor_id = 1 AND s.day="Monday"
GROUP BY d.docker_id, s.day;
推荐阅读
- python - PyQt5从sql数据库读取blob到pixmap
- java - Java Web 项目 - 如何在桌面上提供带有图像的 html 文件
- amazon-web-services - 仅将正文从 API Gateway 保留到 Lambda
- html - 是否有直接的方法来定位网格模板区域中的空网格单元(。)?
- lua - WxLua GUI 2d mappinp
- c - 如何避免插入排序中的 SIGSEGV 错误
- python - Python:一个类属性正在for循环中复制到该类的所有实例中
- python - 为什么python2的re模块不能识别u'®'字符
- node.js - (更新解决方案)Express Web 应用服务抛出“SyntaxError: Unexpected token >”
- python - Django - 不允许具有相同外键类型的属性,如何解决这个问题?