MySql: таблица левого соединения с таблицей транзакций, возвращающая несколько строк

  • У меня есть 2 таблицы: пользователи и paypal_transactions
  • Для каждого пользователя у нас есть идентификатор (с именем user_id в таблице paypal_transactions)
  • У пользователя может быть несколько paypal_transactions. Отношение один ко многим
  • Мне нужно получить последний идентификатор транзакции (упорядоченный по date_dt DESC), когда я делаю свой запрос

Мой текущий запрос:

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

Решение

Ну вот:

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

Другой способ, основанный на первом запросе в первом ответе на Получение последней записи в каждой группе:

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
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]