2011-03-12 7 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 웹 사이트가 아닌, kill = S 임)

답변

1

MySQL을 알고 있다면 아마도 하나의 쿼리에서이 작업을 수행 할 수있는 방법이있을 수 있습니다. 그러나 업데이트 할 때 어떤 이점도 얻지 못할 것이라고 생각합니다. 완전히 별개의 키를 기반으로합니다. 결과를 예측할 수 없기 때문에 실제로 이렇게하는 것이 위험 할 수 있습니다. 두 가지 쿼리를 통해, 무슨 일이 일어나는지 쉽게 알아낼 수 있습니다.

너무 늦지 않으면 사용자와 친구 간의 매핑 테이블을 사용하여 friends 필드를 삭제하는 것이 좋습니다.

$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'"; 

:

+0

친구를 어떻게 처리하겠습니까? (in php;) 누군가 다른 PM을 보낼 수 있는지 확인해야합니다. 아마 폭발을 사용해야 할 것입니다. 그렇죠? – SuperSpy

0

당신이 시도 했습니까?

관련 문제