2017-06-05 67 views
0

在过去的几天中,我一直在寻找如何使mysqli中2列的范围独一无二。例如,column1的值为2,而column2的值为6.如果用户试图在任何3,4,5列中输入其他行,则必须返回错误。我可以在php中检查所有行,但是如果记录太多,它会减慢性能。Mysqli 2列独特范围

对于我的情况,我有一个从数据(存储在UNIX时间戳)和直到数据(再次存储在UNIX时间戳)。

就拿

1497913200(20/06/2017)和这2个日期之间1498518000(27/06/2017)

事情,都必须是无效的,

22/06/2017-29/06/201718/06/2017-26/06/2017

28/06/2017 - 03/07/201712/06/2017-19/06/2017是有效的。

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

我明显知道如何制作唯一的多列,但不是这些列的范围。这是我正在努力的部分。

任何帮助非常感谢。

+0

参见:[?我为什么要为了什么在我看来,提供MCVE是一个非常简单的SQL查询(HTTPS ://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-query) – Strawberry

+0

我甚至没有桌子,因为我想先弄清楚这一点。因为我不想走错路。表或不是我上面提供的唯一“真实”或样本数据。 – Eilleen

+0

好吧,好吧,你可以做得比从这里开始更糟糕(即使我这样说自己;-))... https://stackoverflow.com/questions/30434839/mysql-insert-date-range-into-date-columns -if-dates-dont-overlap-with-existing/30437434#30437434 – Strawberry

回答

0

我相信你需要写一个TRIGGER执行该检查,如:

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 
+0

是否阻止用户在插入时输入?或之后? – Eilleen

+0

是的,就是这样。它将显示一条错误消息,并且不会允许用户插入记录。 –

+0

好吧我得到你正在尝试做的事情,虽然它需要调整到我的场景,所以我不会将它标记为公认的答案 – Eilleen