2013-04-29 2 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_id внутри items_rooms может быть 3. внутри items_rooms есть 10 строк, если элементы, которые находятся в собственности. Мне нужны их элементы, которые нужно удалить и заменить на items_users, но items_rooms не имеет идентификатора владельца, который items имеет.

ответ

1

можно использовать INSERT ... SELECT, вместе с соответствующим присоединиться:

Если приложение подлежит синхронный доступ к базе данных от нескольких клиентов, будьте осторожны, чтобы избежать гонок опасности, возникающей между операторами INSERT и DELETE; в частности, рассмотрим использование 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

Смежные вопросы