2011-03-12 122 views
0

是否可以合併這些查詢?是否可以合併這些查詢?

$sql1 = "UPDATE users AS u, invites AS i 
       SET u.uinvite = u.uinvite - 1, u.ufriends = CONCAT(u.ufriends, ',$iid'), i.seen = 1 
       WHERE u.uid = '$uid' AND i.invited_uid = '$uid' AND i.invitor_uid = '$iid'"; 
$sql2 = "UPDATE users 
       SET ufriends = CONCAT(ufriends, ',$uid') 
       WHERE uid = '$iid'"; 

變量解釋:

$uid = the users ID   $iid = the friends ID 

這是我試圖合併:

$mergesql = "UPDATE invites AS i, users AS u 
        SET 
         CASE 
         WHEN u.uid = '$uid' THEN u.uinvite=u.uinvite-1, u.ufriends = CONCAT(u.ufriends,',$iid') 
         ELSE u.ufriends = CONCAT(u.ufriends,',$uid') 
         END 
         , i.seen = '1'  
        WHERE i.invited_uid = '$uid' AND i.invitor_uid = '$iid' 
        AND (u.uid = '$uid' OR u.uid = '$iid')" 

我很難了解MySQL的作品時,你必須做更復雜的查詢。 我的英語也缺乏專業知識,如果你知道一個好的教程,你可以讓我真的很開心! (不是來自MySQL網站,它是殺= S)

回答

1

瞭解MySQL,可能有一種方法可以在一個查詢中做到這一點,但我認爲你不會得到任何好處,因爲你正在更新基於完全獨立的密鑰。這樣做可能實際上是危險的,因爲結果是不可預測的。在兩個查詢中做這件事,很容易弄清楚發生了什麼。

如果還不算太晚,我建議您刪除friends字段,以支持用戶和朋友之間的映射表。

+0

你將如何處理朋友? (在PHP中;))我必須檢查是否有人被允許發送另一個PM。我可能必須使用爆炸,不是嗎? – SuperSpy 2011-03-14 20:07:06

0

你試試這個:

$mergesql = "UPDATE 
       users AS u, 
       invites AS i, 
       users AS uf 
      SET 
       u.uinvite = u.uinvite - 1, u.ufriends = CONCAT(u.ufriends, ',$iid'), 
       i.seen = 1, 
       uf.ufriends = CONCAT(uf.ufriends, ',$uid') 
      WHERE u.uid = '$uid' 
       AND i.invited_uid = '$uid' AND i.invitor_uid = '$iid' 
       AND uid = '$iid'"; 

相關問題