【发布时间】:2021-10-08 13:46:26
【问题描述】:
我创建了一个名为ticket_manager 的表,其结构如下:
每次扫描基于用户的二维码时,它都会添加一个新行(当它是签到时,它会在“checkIn”中添加一个新行,或者在“checkOut”中添加一个新行check_out_$count" -> 例如"check_in_0 is a pair with "check_out_0"so..
p1 -> 凌晨 2:00 - 凌晨 4:00;上午 10:00 - 11:00
p2 -> 凌晨 3:00 - 凌晨 4:00;
p3 -> 9:00 - 9:30am
现在我想做一个 MYSQL 查询来查找在特定时间之间的事件中的所有人,例如:03:00:00 am 到 05:00:00 am。
我真的不知道循环遍历 json 的最佳方法(并将它们配对)。
到目前为止我知道:SELECT * FROM "wp_ticket_manager" WHERE "event_logs" BETWEEN '31.07.2021 03:00:00' AND '31.07.2021 05:00:00
普通字段之间的所有查询(无对和 json)SELECT * FROM "wp_ticket_manager" WHERE JSON_EXTRACT(event_logs, '$.checkIn.check_in_0') BETWEEN '31.07.2021 03:00:00' AND '31.07.2021 05:00:00'
检查特定字段(但没有用)
我应该更改表格布局以使其更容易吗?
示例数据:
mysql Ver 15.1 Distrib 10.4.18-MariaDB
CREATE TABLE IF NOT EXISTS `ticket_manager` (
`id` int(11) unsigned NOT NULL auto_increment,
`attendee_name` VARCHAR (255) NOT NULL,
`event_logs` text,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
INSERT INTO `ticket_manager` (id, attendee_name, event_logs)
VALUES (1,'p1','{"checkIn":{"check_in_0":" 31.07.2021 02:00:00 am","check_in_1":" 31.07.2021 10:00:00 am"},"checkOut":{"check_out_0":" 31.07.2021 04:00:00 am","check_out_1":" 31.07.2021 11:00:00 am"}}'), (2,'p2','{"checkIn":{"check_in_0":" 31.07.2021 03:00:00 am",},
"checkOut":{"check_out_0":" 31.07.2021 04:00:00 am"}}'), (3,'p3','{"checkIn":{"check_in_0":" 31.07.2021 9:00:00 am",},
"checkOut":{"check_out_0":" 31.07.2021 9:30:00 am"}}');
(所需的输出将是请求中特定时间之间的所有查询)
【问题讨论】:
-
以 CREATE TABLE + INSERT INTO 形式提供样本数据以及该数据的所需输出。还要指定精确 MySQL 版本。
-
我已经添加了数据。谢谢你的建议:)
标签: php mysql json mariadb nested-queries