2014-11-08 33 views
0
  • 我有2個表:用戶和paypal_transactions
  • 對於每個用戶,我們有一個ID(在paypal_transactions表命名USER_ID)
  • 用戶可以有幾個paypal_transactions。關係一對多
  • 我需要獲取最新的事務ID(由date_dt降序排列),當我做我的查詢

我當前的查詢:MySQL的:左加入用戶表數據表返回多行

SELECT `Transaction`.*, `User`.*, `Tipster`.`username` 
FROM `pronostics_framework`.`users` AS `User` 
LEFT JOIN `pronostics_framework`.`users` AS `Tipster` ON (`User`.`tipster_id` = `Tipster`.`id`) 
LEFT JOIN `pronostics_framework`.`paypal_transactions` AS `Transaction` ON (`User`.`id` = `Transaction`.`user_id`) 
ORDER BY `User`.`id` DESC 
LIMIT 500 

目前每個用戶一個交易,它工作正常。順便說一句,許多交易,我仍然從paypal_transactions表(最老的,但我想從現在的最新)的第一條。

我做了許多嘗試,沒有成功。

感謝您的幫助!

+0

請出示你嘗試過什麼。這裏有很多答案:http://stackoverflow.com/questions/1313120/retrieving-the-last-record-in-each-group – Barmar 2014-11-08 20:21:11

+0

我試圖給出錯誤或不是我所期待的,這就是爲什麼我沒有發佈他們。它也不是重複的,因爲加入的表格是不同的。 – zeflex 2014-11-08 21:09:51

+0

當然,它不符合你的期望,如果它工作,你不會發佈一個問題。但是我們不能告訴你你做錯了什麼,所以如果你不發佈,你可以從錯誤中學習。 SO不是免費的編碼服務。 – Barmar 2014-11-08 21:13:09

回答

1

在這裏你去:

SELECT `Transaction`.*, `User`.*, `Tipster`.`username` 
FROM `pronostics_framework`.`users` AS `User` 
LEFT JOIN `pronostics_framework`.`users` AS `Tipster` ON (`User`.`tipster_id` = `Tipster`.`id`) 
LEFT JOIN (SELECT user_id, MAX(date_dt) AS max_date 
      FROM `pronostics_framework`.paypal_transactions 
      GROUP BY user_id) AS max_trans 
    ON User.id = max_trans.user_id 
LEFT JOIN `pronostics_framework`.`paypal_transactions` AS `Transaction` 
    ON (max_trans.user_id = `Transaction`.`user_id` AND max_trans.max_date = Transation.date_dt) 
ORDER BY `User`.`id` DESC 
LIMIT 500 

另一種方式的基礎上,第一個答案第一個查詢在Retrieving the last record in each group

SELECT `Transaction`.*, `User`.*, `Tipster`.`username` 
FROM `pronostics_framework`.`users` AS `User` 
LEFT JOIN `pronostics_framework`.`users` AS `Tipster` ON (`User`.`tipster_id` = `Tipster`.`id`) 
LEFT JOIN `pronostics_framework`.`paypal_transactions` AS `Transaction` ON Transaction.user_id = User.id 
LEFT JOIN `pronostics_framework`.paypal_transactions AS Transactions1 
    ON Transactions1.user_id = Transactions.user_id AND Transactions1.user_id > Transactions.user_id 
WHERE Transactions1.user_id IS NULL 
ORDER BY `User`.`id` DESC 
LIMIT 500 
+0

感謝Barmar ...我知道這不是一個免費的編碼服務,但我總是做一些搜索,然後發佈一個問題:) 順便說一句,它的工作比,但沒有辦法避免這種選擇內部連接做我需要? – zeflex 2014-11-08 21:33:32

+0

我已經添加了另一種方法。你應該對它們進行基準測試,看看哪個更有效。 – Barmar 2014-11-08 21:39:39

+0

我試過第二個,它返回的結果與我發佈的最初結果相同。速度是一樣的,所以我會保留你的第一個答案,再次感謝! – zeflex 2014-11-08 21:56:11