2016-08-19 107 views
0

我需要使用PHP和MySQL检查数据库中的重复值。我正在解释下面的表格。如何使用PHP和Mysql限制重复记录

time_id  member_id  day_id  time 

    1    2   1  12.30am-3.00am 

这里我需要检查time列的副本。假设用户输入的时间像2.00am-4.00ammember_id=2day_id=1应该检查,因为12.00am-3.00am插槽已经预订了该member_id and day_id

在这里,我需要为用户查询不能为同一member_id and day_id再次插入12.00am-3.00am之间的时间。

+1

为什么你还没有使用包括日期的'start time'和'end time'两列?使用查询来检查重复和交叉插槽会很容易。 –

+0

确实如此,但无论如何,这并不难 – Strawberry

+0

您可以在这3列上添加唯一约束条件 – Saurabh

回答

4

这将是更容易(和数据一致性更好。)如果更改time列到两列datetime(例如:date_startdate_end),然后你可以尝试在SQL内置机制来检查用户尝试在这两个日期之间添加一些行。

+0

您是否可以通过代码分享您的创意? – subhra

0

这里有你需要完成这个任务的逻辑步骤:

步骤1独立的开始时间和结束时间为两列。所以,你的表应该是这样的:

time_id member_id entry_day time_in     time_out 
1  2   2016-01-19 2016-08-19 12:30:00  2016-08-18 03:00:00 

你列的类型应该是:

`time_id`: `int` 
`member_id`: `int` 
`time_in`: `DATETIME` 
`entry_day`: `DATE` 
`time_out`: `DATETIME` 

步骤2写一些PHP执行,看起来像这样在数据库上查询:

SELECT * FROM TimeEntryTable t 
WHERE t.member_id = :memberId 
AND :new_entry_time_in BETWEEN t.time_in AND t.time_out 
OR :new_entry_time_out BETWEEN t.time_in AND t.time_out 

您需要通过新记录time_intime_outmember_id。我假设你正在使用PDO ......如果没有,那么你应该开始。

步骤3

检查由该查询返回的结果。

if (count($resultsArray) === 0) { 
    //Create the new record, 
} else { 
    //If you're here than there was a record within that time range and you should not create it. 
} 
+0

但我有两个字段的数据类型是string.Are他们工作在我的情况? – subhra

+0

您将需要转换它们,但它们将工作。 PHP会将它们转换为你。 '$ inTime = new \ DateTime($ inTimeString);'如果您使用'PDO',您可以将该对象作为参数提交。 –

+0

@ Layton Everson:我使用'jquery'时间选择器来选择前端的时间,保存日期时间类型列是否好。 – subhra