[英]MySQL get only rows with a unique value for a certain field
我只想为特定字段(实际上是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__"))
伪代码中的if ((senderID == '1' && "__ receiverID is not yet listed__") || (receiverID == '1' && "__ senderID is not yet listed__"))
。 最终的返回值应该是(0, 1)
。
如何在(My)SQL中执行此操作? 我确实知道如何使用PHP来执行此操作,但是当有成千上万的记录时,它的速度就不够快了。
亲切的问候,
提姆
如果执行此操作,您将在发送方和接收方获得所有唯一ID。
此外,UNION将合并两个结果。
按照您的逻辑,如果您需要对发送/接收的ID分别进行操作,则可以使用第二列的值('S'/'R')来过滤两个集合。
SELECT distinct id, 'S' as Type FROM table WHERE senderID='1'
UNION
SELECT distinct id, 'R' as Type FROM table WHERE receiverID='1'
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 |
+---------+
就像是
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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.