好的,现在我正在研究一个社交网络项目,我想实现一个功能,显示自用户上次登录以来在网站上发生的所有活动。
我有两个表,一个用于帖子,另一个用于回复到帖子。
文章:
+----------+----------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+----------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| username | varchar(256) | YES | | NULL | |
| comment | varchar(10000) | YES | | NULL | |
| date | datetime | YES | | NULL | |
| likes | int(11) | YES | | 0 | |
| deleted | int(4) | YES | | 0 | |
+----------+----------------+------+-----+---------+----------------+
回复:
+----------+----------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+----------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| post | int(11) | NO | | NULL | |
| username | varchar(256) | YES | | NULL | |
| reply | varchar(10000) | YES | | NULL | |
| date | datetime | YES | | NULL | |
| deleted | int(4) | YES | | 0 | |
+----------+----------------+------+-----+---------+----------------+
(回复表中的帖子将其链接到它回复的帖子的ID - 抱歉有任何混淆)
日期在提交帖子或回复后立即设置。
我要做的是获取用户不在网站上时发布的所有帖子和回复,以便在他们离开时显示网站的活动。
尝试生成类似
的内容用户名1发布在主板上 用户名2在Username1
的帖子上发表了评论这样的事情。帖子和回复根据他们的日期分散。
所以我打算从这些表中查询:
SELECT * FROM replies
WHERE date > arbitrary_date AND deleted=0
UNION ALL
SELECT * FROM posts
WHERE date > arbitrary_date AND deleted=0
ORDER BY date DESC;
我只想尝试按日期排序所有回复和帖子的结果,以便我可以按照最新版本创建它们的顺序显示它们。但由于某种原因,我无法弄清楚如何获得正确的结果。数据在查询中被扰乱,或者只是出错了。
查询是我真正需要帮助的部分。我对SQL并不是那么好,尽管有大量的谷歌搜索,我似乎无法弄清楚这一点。
如果您需要澄清,请告诉我。我将非常乐意提供更多细节。
答案 0 :(得分:1)
让它们返回相同的列,例如:
SELECT CONCAT(username, ' posted on ', board_name_column) as msg FROM posts ...
UNION
SELECT CONCAT(username, ' commented on ', board_name_column) as msg FROM replies JOIN posts ON replies.post = post.id ...
另一种选择:
SELECT 'post' AS type, username, board_name_column FROM posts ...
UNION
SELECT 'reply' AS type, username, board_name_column FROM replies JOIN posts ON replies.post = post.id ...