есть ли запрос, в котором я могу выполнить оба запроса в одном?
Это первый
$q = "select c.id as campaignId,c.priceFactor, o.cid,o.bloggerPrice,o.state as state,o.customerPrice,o.id as orderId,o.listPrice,o.basicPrice from campaign c, orders o where c.id={$campaignId} and c.id = o.cid and o.state in (8,9)";
И это вторая
foreach($orders as $order) { $listPrice = $order->priceFactor * $order->basicPrice; if($order->bloggerPrice < $listPrice || $order->customerPrice < $listPrice) { $order->bloggerPrice = $listPrice; $order->customerPrice = $listPrice; } $qUpdate = "update orders set listPrice = {$listPrice},bloggerPrice={$order->bloggerPrice}, customerPrice ={$order->customerPrice} where id=$order->orderId and cid={$order->cid}"; // $this->db->q($qUpdate); }
Мой вопрос: могу ли я сделать это выше, без кода PHP, просто чистого SQL?
В MySQL вы можете использовать соединение сразу после UPDATE. В вашем примере это может выглядеть примерно так:
update Orders o inner join Campaign c on c.id = o.cid set listPrice = o.priceFactor * order.basicPrice , bloggerPrice = case when o.bloggerPrice < o.priceFactor * order.basicPrice then o.priceFactor * order.basicPrice else bloggerPrice end , listPrice = case when o.customerPrice < o.priceFactor * order.basicPrice then o.priceFactor * order.basicPrice else listPrice end where o.state in (8,9) and c.id = {$campaignId}