2013-03-23 34 views
0

我在我的mysql數據庫中有以下情況。 2個表:基於關係的MYSQL插入行

todoitems

  • todo_id
  • todo_title

todo_sync_controllers

  • todo_sync_id
  • DEVICE_ID
  • should_delete
  • IS_DELETED
  • todo_id

正如你可以看到有從todoitems到todo_sync_controllers一個一對多的關係。

我使用php腳本與服務器通信。每次我從待處理物品的設備中進行抓取時,我都需要確保該設備和待辦物品有一個todo_sync_controller條目。如果缺少,應該創建它。

解決此問題的一種方法是從我的php腳本中使用循環和多個查詢,但我想知道這是否可以使用單個INSERT查詢來完成?有任何想法嗎?

+0

你的表爲什麼不創建DEVICE_ID和todo_id獨特的鍵,然後做一個插入查詢每次?只有第一次查詢會成功。 – somnath 2013-03-23 15:29:25

+0

所以基本上你想選擇數據,如果存在其他明智的插入。 – 2013-03-23 15:38:48

+0

@somnath:插入語句將如何顯示?這是不是意味着我仍然需要遍歷所有todoitems併爲每個todo_id執行INSERT查詢? – 2013-03-23 15:54:04

回答

1

您的解決方案非常簡單,只需在您的todo_sync_controllers表中爲todo_id和device_id設置唯一的密鑰,以便在您從腳本中插入表時,它將檢查唯一約束,如果它不存在,則會插入數據,否則會忽略mysql錯誤來查詢。如果你想檢查你的數據是插入的還是因爲重複鍵而被忽略,你需要申請如果條件同時進行查詢,如果它返回true意味着插入完成,否則被系統忽略。這將做如下代碼

if(mysql_query($sql_query)){ 
    echo "your data inserted"; 
}else{ 
    echo "data already exist"; 
} 

,並改變與

create unique index on todo_sync_controllers (todo_id ,device_id) 
+0

這很好,非常感謝這個解決方案! – 2013-03-24 17:27:40