2013-04-29 18 views
0

信息: 我需要創建一個MySQL代碼從表items_rooms選擇數據不止一個線,數據插入到表items_users根據items_rooms內部的數據,然後刪除items_rooms中的數據。但在此之內,我還需要從另一個表items中收集一些數據以獲取擁有該物品的擁有者的用戶標識。MySQL的代碼來獲得一個表中的數據,將其插入到另一併刪除舊數據

因此,最後只有有數據的表是項目和items_users,他們的工作是從items_rooms獲取他們的數據。

似乎令人困惑?我知道,這是我寫的代碼,我知道這是完全錯誤的,但它可能會幫助你。

$getItemRooms = $db->query("SELECT * FROM items_rooms WHERE room_id = '" . $roomid . "'"); 
    while($roomitem = $getItemRooms->fetch_assoc()) { 

     $getItems = $db->query("SELECT * FROM items WHERE item_id = '" . $roomitem['item_id'] . "'"); 
     while($items = $getItems->fetch_assoc()) { 

       $sql->query("INSERT INTO items_users (item_id, user_id) VALUES ('" . $roomitem['item_id'] . "', '" . $items['placedBy'] . "')"); 
       $sql->query("DELETE FROM items_rooms WHERE room_id = '" . $roomid . "'"); 
       echo 'done'; 

     } 

    } 

因此,舉例來說,room_iditems_rooms內可能是3內部items_rooms有10行,如果您所擁有的項目。我需要他們刪除項目並將其替換爲items_users,但items_rooms沒有items擁有的所有者ID。

回答

1

人們可以用適當的使用INSERT ... SELECT,一起加入:

如果你的應用是受到來自多個客戶端的同步訪問數據庫,要小心避免INSERTDELETE語句之間出現的競爭風險;特別考慮在上述聲明中使用locking read並在同一事務中執行DELETE聲明。

0

如果您的主要問題是從項目表中獲取數據,請嘗試使用連接檢索所有需要的查詢。 例如:

select * 
from items_rooms as ir 
inner join items as i on ir.item_id=i.item_id 
where item_id = ... 

這是更好地從每一個表中指定,而不是使用(*)只在必要的字段。 您也可以將INSERT和SELECT語句組合到一個查詢中。 試試看MySQL reference 它會簡化和加快你的php腳本

相關問題