不要从列中选择与SQL中另一列的值相同的值
问题描述:
我从表中有两列; fromid和toid,它们在有些情况下包含相同的用户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";
答
尝试在您的查询中将UNION ALL
更改为UNION
。前者保留两个数据集的所有行;后者消除重复 - 这是一个缩写形式UNION DISTINCT
。
+0
谢谢马克,工作,我感谢你的帮助。 – 2012-01-14 16:53:01
简化您的代码,我们不需要看到您的整个查询。只给我们相关的代码,模拟只有你需要帮助解决的问题。 – 2012-01-14 13:38:56
我试过使用计数查询,但这并没有工作,但我想不出任何其他解决方案:\t/* if(count($ row-> displayname> 1)) \t echo“duplicate rows”; */ – 2012-01-14 13:41:29
我的意思是,在上面的查询中删除所有不必要的/ join/union选定字段,无需重现问题。太多白噪声让任何人想要帮助。 – 2012-01-14 13:46:33