【发布时间】:2021-10-05 14:55:30
【问题描述】:
您好,我有一个查询要从数据库返回一个 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";
【问题讨论】:
-
看起来你应该使用
GROUP BY d.docker_id而不是DISTINCT,应该使用JSON_ARRAYAGG而不是GROUP_CONCAT,这样你应该能够得到一个查询(没有子查询)。为什么 postman 不同可能是更严格的 SQL 模式,但修复查询,两者都应该很高兴。
标签: mysql json mariadb postman