2014-02-06 20 views
0

我有以下MySQLi代碼,用於將列數據從一個表插入到另一個表中,該數據工作得非常好。但是,我想要做的是僅當列數據不存在於check_in表中時才插入列數據。我的代碼如下:僅當數據不存在時纔將數據從一個表插入到另一個表

$insertInvRoom = $db->prepare("INSERT checkin_rooms (checkin_inventory_id, checkin_room_name, checkin_inventory_room_id) SELECT inventory_id, inventory_room_name, inventory_room_id FROM inventory_rooms WHERE inventory_id = ?"); 
$insertInvRoom->bind_param("i", $inventoryID[$key]); 
$insertInvRoom->execute(); 
$insertInvRoom->close(); 

我該怎麼做?

回答

1

您可以使用NOT EXISTS這樣的:

$insertInvRoom = $db->prepare("INSERT INTO checkin_rooms (checkin_inventory_id, checkin_room_name, checkin_inventory_room_id) SELECT i.inventory_id, i.inventory_room_name, i.inventory_room_id FROM inventory_rooms i WHERE i.inventory_id = ? " + 
    " AND NOT EXISTS (SELECT * FROM checkin_rooms cr WHERE cr.checkin_inventory_id = i.inventory_id)"); 
$insertInvRoom->bind_param("i", $inventoryID[$key]); 
$insertInvRoom->execute(); 
$insertInvRoom->close(); 
+0

仍然沒有增加表 –

+0

這不是因爲你已經添加了你測試的行? –

+0

不是數據庫是空的 –

2

可以使用IF NOT EXISTS條款,如:

$insertInvRoom = $db->prepare("IF NOT EXISTS (SELECT * FROM checkin_rooms WHERE checkin_inventory_id = ?) INSERT INTO checkin_rooms (checkin_inventory_id, checkin_room_name, checkin_inventory_room_id) SELECT inventory_id, inventory_room_name, inventory_room_id FROM inventory_rooms WHERE inventory_id = ?"); 
$insertInvRoom->bind_param("i", $inventoryID[$key], $inventoryID[$key]); 
+0

哦,就這麼簡單!這對我來說是全新的,所以感謝你如此快速地回答:) –

+0

@AndyHolmes不客氣。 :P我相信我現在讓代碼真正起作用了,如果我正確的話,你最後使用'SELECT'來添加數據? – hichris123

+0

啊,我剛剛運行這段代碼,結果發現它實際上停止了將數據添加到數據庫中的所有內容。任何想法爲什麼? –

0

我知道你已經有了答案,但以防萬一你有興趣,還有另一種類型的查詢,你可以做插入數據如果不存在,或者如果它存在則更新它。例如:

INSERT INTO my_table (my_column1, my_column2, my_count) 
    VALUES ('some string', 14, 1) 
ON DUPLICATE KEY 
    UPDATE my_column1 = 'some_string', my_column2 = 14, my_count = my_count + 1; 

可能不會幫你這一次,但它是超級有用,如果你只是想確保該行是存在的,無論是已經存在或沒有,沒有做多個查詢。

欲瞭解更多信息:http://dev.mysql.com/doc/refman/5.5/en/insert-on-duplicate.html

+0

但它不需要更新,它只是需要插入它,如果它已經在那裏:) –

+0

是的,我知道:-)只是想你可能會發現它是一個有用的知道的道路,因爲它是一個相關的問題 – JMTyler

+0

謝謝隊友,將爲未來的項目記住這一點 –

相關問題