Я сделал хороший поиск аналогичного вопроса, но без радости. Я думаю, что ответ на мой вопрос основан на DISTINCT, GROUP и UNION, но просто не может соединить их, что имеет смысл.Вывод данных из двух таблиц с использованием последней записи
У меня есть 2 таблицы:
users(id, username)
activitylog(id, userid, usernamedisp, activity)
Образец данных:
users
id, username
1, Joe Bloggs
2, Jane Doe
3, John Smith
activitylog
id, userid, usernamedisp, activity
1, 3, John Smith , logged in
2, 3, John Smith , visited about us page
3, 1, Joe Bloggs , logged in
4, 3, John Smith , logged out
5, 2, Jane Doe , logged in
6, 1, Joe Bloggs , logged out
7, 2, Jane Doe , visited about us page
(есть еще один не связан, но веская причина, почему имя пользователя появляется в обеих таблицах)
I хотите, чтобы вывести список пользователей по порядку users.id вместе с именем activitylog.username и, наконец, только самую последнюю активность. должен выглядеть следующим образом:
User, Username , Last Activity
1, Joe Bloggs, logged out
2, Jane Doe , visited about us page
3, John Smith, logged out
В то время как я мог это сделать, выполнив запрос внутри цикла по каждому результату (SELECT, активность из activitylog где Идентификатор_пользователя = $ Foo ORDER BY DESC ид, LIMIT 0,1) - Я предпочел бы запустить все это в одном красивом чистом фрагменте кода, так как количество пользователей может быть между 50-100, и это слишком много запросов для моего комфорта.
Я уверен, что это возможно, но я просто не могу представить его вместе.
спасибо за ваш скорый ответ, однако код, который вы перечислили выше возвращает только один результат ... пользователь с самым высоким/самым последнем activitylog.id – teddytash
не должен. подзапрос вернет последний идентификатор для каждого пользователя в таблице действий. –
@MarcB ActivityLog не имеет колонки имени пользователя, вероятно, вы должны заменить группу по столбцу на userid/usernamedisp. Вероятно, именно это и вызывает неожиданное поведение. – SoulTrain