2013-05-11 38 views
2

我當前使用PDO/MySQL的兩個查詢兩個更新查詢:結合在同一領域,但使用不同的值

$sql = "UPDATE permissions SET valid = 'N' WHERE perm_desc = :perm_desc"; 
$sth = $this->db->prepare($sql); 
$sth->bindParam(':perm_desc', $perm_desc); 

$sql2 = "UPDATE role_perm SET valid = 'N' WHERE perm_id = :perm_id"; 
$sth2 = $this->db->prepare($sql2); 
$sth2->bindParam(':perm_id', $perm_id); 

我不知道它是否會更有意義,結合這些,沿着線的東西作者:

$sql = "UPDATE permissions, role_perm 
     SET permissions.valid = 'N', role_perm.valid = 'N' 
     WHERE permissions.perm_desc = :perm_desc AND role_perm.perm_id = :perm_id"; 

我無法纏繞我的頭周圍JOINs和一些人說,他們更快,而其他人說他們慢。什麼是最好的解決方案?

+0

我想你想要一個'OR' – bmm6o 2013-05-11 13:12:39

回答

0

使用當前的兩種不同更新方法,必須處理第二次更新失敗並手動回滾第一次更新的情況。如果您依靠一個開放式事務來處理您的失敗,那麼您將在數據庫中的一個事務處理時間超過所需時間。

但畢竟,這取決於您的要求。如果你需要同時執行這兩個更新或兩者都沒有(第二個失敗的情況下回滾),那麼我寧願採用一個sentence的方法。通過這種方式,您可以從交易中受益。

+0

在這種情況下,我需要既不執行查詢,也不執行第一個查詢,也不執行第一個和第二個查詢。感謝您的反饋。 – 2013-05-11 13:48:01