2017-02-19 8 views
0

Я не очень опытный с SQL в целом, и мне интересно, как совместить эти два отдельных строк обновления, используя те же переменные:Как обновить разные строки из двух столбцов переменными, которые представляют собой идентификатор другой строки с использованием mysqli и PHP?

$queryA = 'UPDATE table SET redirectsToId ='.$redirectId.' WHERE id='.$id;  
$queryB = 'UPDATE table SET redirectFromId ='.$id.'   WHERE id='.$redirectId; 

Заранее спасибо за любые предложения.

EDIT: Что является наиболее эффективным способом сделать это в целом?

ответ

0

Вам действительно не нужно. В большинстве баз данных вы можете обернуть два оператора в одной транзакции, чтобы они вступили в силу «одновременно».

Но, вы также можете сделать:

UPDATE table 
    SET redirectsToId = (CASE WHEN id = $id THEN $redirectId ELSE redirectsToId END), 
     redirectsFromId = (CASE WHEN id = $id THEN redirectsFromId ELSE $id) 
    WHERE id IN ($id, $redirectId); 
+0

Спасибо! Ваш ответ очень близок к тому, что я пробовал в соответствии с другим решением SO и неправильно думал, что он не работает (но, в конце концов, это так). "$ query = 'UPDATE table SET redirectsToId = CASE id WHEN'. $ Id. ' THEN '. $ RedirectId.' ELSE redirectsToId END, redirectFromId = CASE id WHEN '. $ RedirectId.' THEN '. $ Id.' ELSE redirectFromId END WHERE id in ('. $ RedirectId.', '. $ Id.') '; " Есть ли разница во внутренней обработке, когда я использую «CASE id WHEN $ id» вместо «CASE WHEN id = $ id», как вы предложили? Как перенести два оператора в одну транзакцию? – Guitho

0

Вы на самом деле не нужно. Просто сохраните их в двух отдельных обновлениях.