2012-01-14 3 views
-1

테이블의 두 열이 있습니다. fromidtoid이 경우에 동일한 사용자 ID가 포함됩니다.SQL의 다른 열 값과 동일한 열의 값을 선택하지 마십시오.

이 두 열의 모든 ID를 선택하는 드롭 다운 선택 상자가 있습니다.

내 문제는 드롭 다운이 모든 사용자를 선택하지만 한 사용자가 두 열 모두에있을 때 중복된다는 것입니다.

사용자가 두 번 열에 나타나면 한 번만 사용자를 선택하고 열 중 하나에 우선 순위 또는 MAX를 지정하는 것이 좋습니다. 여기 코드는 내가 지금까지 가지고 있습니다 :

$sql=" 
          SELECT 
           DISTINCT u.".($config->realnames ? "name" : "username")." AS displayname, 
           u.id 
          FROM 
           (#__users AS u 
          INNER JOIN 
           #__uddeim AS um 
          ON 
           u.id=um.fromid) 
          WHERE 
           um.toid=".(int)$myself." 
          AND 
           um.totrash=0 
          AND 
           `um`.`delayed`=0".$filter." 
          UNION ALL 
          SELECT 
           DISTINCT u.".($config->realnames ? "name" : "username")." AS displayname, 
           u.id 
          FROM 
           (#__users AS u 
          INNER JOIN 
           #__uddeim AS um 
          ON 
           u.id=um.toid) 
          WHERE 
           um.fromid=".(int)$myself." 
          AND 
           um.totrashoutbox=0".$filter." 
          AND um.systemflag=0"; 
나는 무엇을 시도했다

- 나는 카운트 쿼리하지만 dind't 작업을 사용하여 시도

:

if (count ($row->displayname > 1)) 
    echo "duplicate rows"; 
+3

코드를 단순화하여 전체 쿼리를 볼 필요가 없습니다. 해결해야 할 문제 만 에뮬레이트 한 관련 코드를 제공하십시오. –

+0

카운트 쿼리를 사용해 보았지만 작동하지 않았지만 다른 솔루션을 찾을 수 없습니다. \t/* if (count ($ row-> displayname> 1)) \t "duplicate rows"; */ –

+0

위의 쿼리에서 불필요한/join/union 선택된 필드를 모두 제거하면 문제를 재현 할 수 있습니다. 누구도 도와주고 싶어하는 너무 많은 백색 잡음. –

답변

3

시도를 쿼리에서 UNION ALL을 변경하면 UNION이됩니다. 전자는 두 데이터 세트의 모든 행을 유지합니다. 후자는 중복을 제거합니다 - UNION DISTINCT의 축약 된 형태입니다.

+0

Mark, 고맙습니다. 도움을 주셔서 감사합니다. –

관련 문제