2012-09-16 77 views
1

我有一個包含事務記錄的數據庫。每條記錄屬於一個交易鏈,並且這些記錄具有它們共享的T​​CID(交易鏈ID)。每筆交易包含一個發件人和一個收件人。我需要做的是檢查鏈中的最終接收用戶是否與另一個鏈中的第一個發送者相同。僅從組中的第一條記錄中選擇值

目前,我的MySQL查詢返回記錄,其中最終的接收者在另一個鏈的任何事務中,而不僅僅是第一個。我需要嚴格限制最終收件人和第一個發件人。

我試着使用group by,order by和limit 1,但是這些都是在查詢發現一些記錄之後應用的。這裏的查詢我到目前爲止已經試過:

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

任何人都知道的一種方式,我可以只搜索第一個(最低TID)記錄的senderUID一組(TCID)嗎?

感謝您的幫助!

回答

1

這樣應該可以讓你在正確的方向 -

//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

而且你可以添加一個LIMIT 1如果你想只得到1列,其中senderUID是TCID組中的第(1)/(4,7,8)

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

相關問題