Ваш запрос неверен. Сначала вы пропустили псевдоним u
таблицы users
, поэтому вторая строка должна выглядеть так:
FROM users u
Во-вторых, в четвертой строке вы случайно написали u.id = cph.id
, но вы хотите соответствовать userId
, а не cancelPaymentHistory.id
. Кроме того, вы пропустили псевдоним для таблицы cancelPaymentHistory
. Таким образом, правильная четвертая строка должна выглядеть так:
JOIN cancelPaymentHistory cph ON u.id = cph.userId
Весь запрос будет выглядеть так:
SELECT u.id as userId,ph.bookingId as paymentHistoryBooking,cph.bookingId as CancelBookingId,ub.bookingId as usrBooking
FROM users u
JOIN paymentHistory ph ON u.id=ph.userId
JOIN cancelPaymentHistory cph ON u.id=cph.userId
JOIN usr_booking ub ON u.id=ub.userId
WHERE u.id='152';
Чтобы упорядочить результат по последнему createdOn
из всех таблиц, вы должны сначала определить последний createdOn
всех таблиц:
SELECT userId, max(createdOn) as latestActivity
(SELECT userId, max(createdOn) as createdOn
FROM cancelPaymentHistory
UNION
SELECT userId max(createdOn) as createdOn
FROM usr_booking
UNION
SELECT userId max(createdOn) as createdOn
FROM paymentHistory)
Этот результат должен быть объединен с предыдущим запросом:
SELECT u.id as userId,ph.bookingId as paymentHistoryBooking,cph.bookingId as CancelBookingId,ub.bookingId as usrBooking
, max(latestActivity)
FROM users u
JOIN paymentHistory ph ON u.id=ph.userId
JOIN cancelPaymentHistory cph ON u.id=cph.userId
JOIN usr_booking ub ON u.id=ub.userId
JOIN (SELECT userId, max(createdOn) as latestActivity
FROM (SELECT userId, max(createdOn) as createdOn
FROM cancelPaymentHistory
UNION
SELECT userId, max(created_on) as created_on
FROM usr_booking
UNION
SELECT userId, max(createdOn) as createdOn
FROM paymentHistory) a) activity ON activity.userId = u.id
WHERE u.id='1'
ORDER BY activity.latestActivity DESC;
Обратите внимание, что я все еще получил ORDER BY
в запросе. Я предполагаю, что вы хотите запустить этот оператор для нескольких пользователей, чтобы вы могли изменить WHERE
-Statement, например WHERE u.id IN ('1','2','3')
, и по-прежнему иметь отсортированный список.
Я настроил для вас скрипку http://sqlfiddle.com/#! 9 / ea835a / 28/0