2016-08-19 111 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