2015-10-14 6 views
0

У меня есть две таблицы: MySQLОбъединение двух запросов MySQL (SELECT и UPDATE) в одну

  • таблица называется rawmats, который хранит количество некоторых видов сырья;
  • другой, называемый stock_changes хранения событий, когда запас определенного материала изменяется (количество дельты сохраняется, связанное с идентификатором материала).

Мне нужно сделать запрос MySQL для того, чтобы отменить все изменения, хранящиеся в stock_changes таблицы, к фактическому запасу, хранящемуся в rawmats.

В настоящее время, следующий код PHP делает это хорошо:

$stock_changes_req = $db->prepare('SELECT rawmat_id, delta FROM stock_changes'); 
$stock_update_req = $db->prepare('UPDATE rawmats SET stock = stock - :delta WHERE id=:rawmat_id'); 

$stock_changes_req->execute(); 
$stock_changes = $stock_changes_req->fetchAll(PDO::FETCH_ASSOC); 

foreach ($stock_changes as $stock_change) 
    $stock_update_req->execute($stock_change); 

Есть два вопроса по этому поводу:

  • Можно ли объединить эти два запроса (и цикл PHP) в один большой запрос mysql? Я думаю, было бы лучше, если бы он был закодирован таким образом
  • Если возможно слияние, было бы выгодно с точки зрения производительности? Я лично так думаю, потому что он заменит два запроса mysql и петлю php только на один большой запрос mysql. Если прирост производительности будет только небольшим, тогда мой вопрос не будет интересовать меня.

ответ

1

Да, слияние выбора и обновления в одном запросе является хорошей идеей, особенно когда оно позволяет избежать медленной петли php. пожалуйста, рассмотреть следующий проект решения:

UPDATE table1 t1, table2 t1 SET t1.stock = t1.stock - t2.delta WHERE t1.id=t2.id and ... 

Вы также можете использовать быстрый временную таблицу памяти (с полом-результатами от любого SELECT) или подзапроса вместо table2

+0

Sql, как это для меня : трудно найти правильный путь, но так очевидно, когда вы можете увидеть решение ... Кстати, вы неправильно использовали псевдоним table2 (t1 вместо t2). много thx – yolenoyer

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