尝试在特定日期之后从多个mysql表中进行选择

时间:2014-09-09 07:27:35

标签: php mysql sql social-networking

好的,现在我正在研究一个社交网络项目,我想实现一个功能,显示自用户上次登录以来在网站上发生的所有活动。

我有两个表,一个用于帖子,另一个用于回复到帖子。

文章:

+----------+----------------+------+-----+---------+----------------+
| 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并不是那么好,尽管有大量的谷歌搜索,我似乎无法弄清楚这一点。

如果您需要澄清,请告诉我。我将非常乐意提供更多细节。

1 个答案:

答案 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 ...