Я пытаюсь создать раздел недавних действий для страницы профиля пользователя.
Для этого примера у меня есть 3 таблицы.
Одним из них является таблица пользователя
+-------------+--------------+-------------+
: user_id : username : join_date :
+-------------+--------------+-------------+
: 1 : myacct : 2018-01-02 :
+-------------+--------------+-------------+
: 2 : johndoe : 2018-01-05 :
+-------------+--------------+-------------+
Во-вторых, таблица blog_post
+-------------+--------------+-------------+-----------+-----------+
: id : author_id : title : content : post_date :
+-------------+--------------+-------------+-----------+-----------+
: 1 : 2 : Some stuff : I like... : 2018-01-05:
+-------------+--------------+-------------+-----------+-----------+
: 2 : 1 : My Title : This i... : 2018-01-04:
+-------------+--------------+-------------+-----------+-----------+
Третий ответ
+-------------+--------------+-------------+-----------+-----------+
: id : auth_id : headline : content : rep_date :
+-------------+--------------+-------------+-----------+-----------+
: 1 : 1 : thanks : Nice p... : 2018-01-04:
+-------------+--------------+-------------+-----------+-----------+
То, что я хочу сделать, это получить все из столбца blog_posts.title и все из столбца replies.headline (группировать результаты в целом), где author_id и auth_id соответствуют user_id. Тогда я хочу заказать его по датам по убыванию. Обратите внимание, что столбцы даты и для blog_posts, и для таблицы ответов называются по-разному (как и в моих реальных обстоятельствах). Затем я хочу ограничить свои результаты на 3 (следовательно, причина в «недавних» действиях).
Я попытался использовать UNION ALL с некоторым успехом. Хотя он группирует все из одной таблицы, затем следуют другие таблицы. Кроме того, я был озадачен получением его в PHP с помощью цикла while и функции fetch_object ().
Попробуйте что-то вроде этого …
SET ROWCOUNT 3
select username, title, post_date, type
from
(
select username, title, post_date, 'blog post' as "type"from blog_post b
join users u on u.user_id = b.author_id
union all
select username, headline as "title", rep_date as "post_date", 'reply' as "type"from replies r
join users u on u.user_id = r.auth_id
) as FullQuery
order by post_date desc
Других решений пока нет …