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

时间:2012-01-14 13:33:33

标签: sql select duplicates max

我从桌子上有两列; fromid toid ,其中包含相同的用户ID。

我还有一个下拉选择框,可以从这两列中选择所有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";

我做了什么 -

我尝试使用计数查询,但这不起作用:

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

1 个答案:

答案 0 :(得分:3)

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