我有一个mysql表,以保持每月的故障排除单号范围。由于我将月票详细信息存储在单独的表中,我如何获得我的票证编号介于它们之间的票证范围记录?当然可以通过PHP使用,但是必须通过mysql查询来完成。
我的样本表和数据如下:
CREATE TABLE `ticket_range` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`start_range` bigint(20) unsigned NOT NULL,
`end_range` bigint(20) unsigned NOT NULL,
`range_year` smallint(5) unsigned NOT NULL,
`range_month` tinyint(3) unsigned NOT NULL
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `ticket_range`
(`id`, `start_range`, `end_range`, `range_year`, `range_month`) VALUES
( 1 , 1 , 522039 , 2019 , 1 ),
( 2 , 522040 , 1161530 , 2019 , 2 ),
( 3 , 1161531 , 1754174 , 2019 , 3 ),
( 4 , 1754175 , 2359084 , 2019 , 4 );
我期望的查询如下:
SELECT * FROM `ticket_range` WHERE (1700000,1200000,500000) BETWEEN `start_range` AND `end_range`
要给我以下结果:
id | start_range | end_range | range_year | range_month | ticket
---+-------------+-----------+------------+-------------+---------
4 | 1754175 | 2359084 | 2019 | 3 | 1700000
4 | 1754175 | 2359084 | 2019 | 3 | 1200000
2 | 522040 | 1161530 | 2019 | 1 | 500000
答案 0 :(得分:0)
检查您的where条件是否错误。括号中应该有一个操作数,而不是3个值。 因此,请尝试下面的查询,我已经对其进行了测试-
SELECT id,
start_range,
end_range,
range_year,
range_month,
1700000 AS ticket
FROM `ticket_range`
WHERE 1700000 BETWEEN `start_range` AND `end_range`
UNION ALL
SELECT id,
start_range,
end_range,
range_year,
range_month,
1200000
FROM `ticket_range`
WHERE 1200000 BETWEEN `start_range` AND `end_range`
UNION ALL
SELECT id,
start_range,
end_range,
range_year,
range_month,
500000
FROM `ticket_range`
WHERE 500000 BETWEEN `start_range` AND `end_range`