我想只获取某个字段具有唯一值的行(实际上是2个)。 我的桌子是这样的:
id senderID receiverID ... ... ...
_________________________________________________
0 0 1 ... ... ...
1 2 1 ... ... ...
2 1 0 ... ... ...
3 0 2 ... ... ...
4 2 0 ... ... ...
5 1 2 ... ... ...
在此表中,id
是唯一始终。 senderID
是发送邮件的用户的ID,receiverID
是收到邮件的用户的ID。 ...
是一些字段(如text
),这些字段并不重要,也不是唯一的。
首先,我希望获得所有行,其中我(#1)是发送者或接收者。
SQL: "SELECT id FROM table WHERE senderID='1' OR receiverID='1'";
这将返回(0, 1, 2, 5)
。
但是现在,我只想要所有独特的记录。 所以条件是:
1
应为senderID或receiverID。if ((senderID == '1' && "__ receiverID is not yet listed__") || (receiverID == '1' && "__ senderID is not yet listed__"))
。最终回报应为(0, 1)
。
如何在(我的)SQL中执行此操作?我知道如何使用PHP来做到这一点,但是当有数千条记录时,它已经不再那么快了。
亲切的问候,
添
答案 0 :(得分:2)
如果您这样做,您将获得所有不同的身份证件,您将成为发件人,而不同的身份证件就是您所在的身份。
此外,UNION将结合两种结果。
在你的逻辑中,你可以使用第二列值('S'/'R')过滤分离2组,如果你需要分别为发送/接收的id做事。
SELECT distinct id, 'S' as Type FROM table WHERE senderID='1'
UNION
SELECT distinct id, 'R' as Type FROM table WHERE receiverID='1'
答案 1 :(得分:2)
select min(id) from
(
select id, senderID pID from table where receiverID = '1'
union
select id, receiverID pID from table where senderID = '1'
) as fred
group by pID;
对于您的数据集,这给出了:
+---------+
| min(id) |
+---------+
| 0 |
| 1 |
+---------+
答案 2 :(得分:1)
像
这样的东西SELECT DISTINCT id, senderID, receiverID FROM table WHERE senderID='1' OR receiverID='1';
DISTINCT
关键字将从结果中删除任何重复项。到目前为止工作正常,除了id,senderID和receiverID之外,你不添加任何其他列。
否则您也可以使用GROUP BY
子句
SELECT id FROM table WHERE senderID='1' OR receiverID='1' GROUP BY senderID, receiverID;