不要从列中选择与SQL中另一列的值相同的值

问题描述:

我从表中有两列; 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

简化您的代码,我们不需要看到您的整个查询。只给我们相关的代码,模拟只有你需要帮助解决的问题。 – 2012-01-14 13:38:56

+0

我试过使用计数查询,但这并没有工作,但我想不出任何其他解决方案:\t/* if(count($ row-> displayname> 1)) \t echo“duplicate rows”; */ – 2012-01-14 13:41:29

+0

我的意思是,在上面的查询中删除所有不必要的/ join/union选定字段,无需重现问题。太多白噪声让任何人想要帮助。 – 2012-01-14 13:46:33

尝试在您的查询中将UNION ALL更改为UNION。前者保留两个数据集的所有行;后者消除重复 - 这是一个缩写形式UNION DISTINCT

+0

谢谢马克,工作,我感谢你的帮助。 – 2012-01-14 16:53:01