Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysqli的唯一范围为2列_Mysql - Fatal编程技术网

Mysqli的唯一范围为2列

Mysqli的唯一范围为2列,mysql,Mysql,在过去的几天里,我一直在研究如何使mysqli中的2列的范围独一无二。例如,column1的值为2,column2的值为6。如果用户试图将第3、4、5列中的任何一列作为其他行输入,则必须返回错误。我可以在php中检查所有行,但如果记录太多,则会降低性能 对于我的场景,我有一个From数据(存储在unix时间戳中)和Till数据(同样存储在unix时间戳中) 例如 1497913200(20/06/2017)和1498518000(27/06/2017) 这两个日期之间的任何内容都必须无效 例如2

在过去的几天里,我一直在研究如何使mysqli中的2列的范围独一无二。例如,column1的值为2,column2的值为6。如果用户试图将第3、4、5列中的任何一列作为其他行输入,则必须返回错误。我可以在php中检查所有行,但如果记录太多,则会降低性能

对于我的场景,我有一个From数据(存储在unix时间戳中)和Till数据(同样存储在unix时间戳中)

例如

1497913200(20/06/2017)
1498518000(27/06/2017)

这两个日期之间的任何内容都必须无效

例如
2017年6月22日-2017年6月29日
2017年6月18日-2017年6月26日

2017年6月28日-2017年7月3日
2017年6月12日-2017年6月19日
均有效

我想你明白了,但如果需要,我可以详细说明

我显然知道如何制作唯一的多列,但不知道这些列的范围。这就是我正在努力解决的问题


非常感谢您的帮助。

我相信您需要编写一个
触发器来执行此检查,例如:

CREATE TRIGGER date_check_trigger BEFORE INSERT ON `table` FOR EACH ROW
BEGIN
    SET @EXISTING_RECORD_COUNT = (SELECT COUNT(*) FROM `table` WHERE NEW.date BETWEEN start_date AND end_date)
    IF (@EXISTING_RECORD_COUNT > 0) THEN
        SIGNAL SQLSTATE '45000' set message_text='Invalid date, a range already exists';
    END IF;
END

看:我甚至还没有这张表,因为我想先把这背后的逻辑搞定。因为我不想走错路。表与否我拥有的唯一“真实”或样本数据就是上面提供的数据。好吧,你可能比从这里开始做得更糟(即使我自己这么说;-)。。。这会阻止用户在插入时输入吗?还是之后?是的,是的。它将显示一条错误消息,并且不允许用户插入记录。好的,我知道您正在尝试执行的操作,尽管它需要根据我的场景进行调整,所以我不会将其标记为已接受的答案只是Yet标记答案很琐碎,我想说的是,您不能有唯一的约束来执行我们想要执行的扫描类型。因此,最好写一个触发器。换句话说,你是说它是一个触发器或更高级别的方法,这意味着我应该用php来做这件事,然后用它来做