gpt4 book ai didi

php - 仅从组中的第一条记录中选择值

转载 作者:行者123 更新时间:2023-11-29 00:40:36 24 4
gpt4 key购买 nike

我有一个包含交易记录的数据库。每条记录都属于一个事务链,并且它们有一个共享的 TCID(事务链 ID)。每个交易都包含一个发送方和一个接收方。我需要做的是检查一个链中的最终接收用户是否与另一个链中的第一个发送者相同。

目前,我的 MySQL 查询返回最终接收者在另一个链的任何事务中的记录,而不仅仅是第一个。我需要将其严格限制为最终接收者和第一个发送者。

我尝试使用 group by、order by 和 limit 1,但这些都是在查询找到一些记录后应用的。这是我到目前为止尝试过的查询:

SELECT TCID FROM transactions WHERE senderUID = '$receiverUID' GROUP BY TCID LIMIT 1

有谁知道我可以只搜索组 (TCID) 中第一个(最低 TID)记录的 senderUID 的方法吗?

感谢您的帮助!

最佳答案

这应该能让你朝着正确的方向前进 -

//Gets rows where senderUID is the first (lowest TID) record in group
SELECT a.*
FROM test a
WHERE a.senderUID = '$receiverUID'
AND NOT EXISTS (select * from test where TCID = a.TCID and id < a.id and senderUID != '$receiverUID')
GROUP BY TCID

UNION

//Gets rows where senderUID is the same as the last receiverUID of TCID
SELECT b.*
FROM test b
WHERE b.receiverUID = '$receiverUID'
AND NOT EXISTS (select * from test where TCID = b.TCID and id > b.id and receiverUID != '$receiverUID')
GROUP BY TCID

作为一个简单的例子,我有下表-

table data

因此,如果我设置 $receiverUID = 1,我会得到 2 行,其中 senderUID 是 TCID 组中的第一个 (1,9),以及 3 行,其中 senderUID 是 TCID 组中的 receiverUID (4,7, 8)

TCID group for senderUID/receiverUID as 1

如果您只想获得 senderUID 是 TCID 组 (1)/(4,7,8) 中第一个的行,您可以添加 LIMIT 1

SELECT a.* 
FROM test a
WHERE a.senderUID = '$receiverUID'
AND NOT EXISTS (select * from test where TCID = a.TCID and id < a.id and senderUID != '$receiverUID')
GROUP BY TCID LIMIT 1

TCID group for senderUID/receiverUID as 1, limit only first row senderUID

同样的想法,如果我设置 $receiverUID = 2 (3,11)/(6,10)

TCID group for senderUID/receiverUID as 2

LIMIT 1 (3)/(6,10)

TCID group for senderUID/receiverUID as 2, limit only first row senderUID

关于php - 仅从组中的第一条记录中选择值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12449396/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com