mysql - 在这种情况下什么是合适的查询

标签 mysql

这是我的场景:

用户可以在自己的个人资料上发帖,也可以分享其他用户的帖子。我想在查询中选择每个帖子并分享他所做的(使用日期时间排序)。我只是无法用我的基本 MySQL 技能找到合适的查询。帮我找到我的路扔了这个!干杯。

表格帖子

id   user_id     content        datetime
1    100         Loremipsum1    2013-03-04 19:35:02 
2    200         Loremipsum2    2013-03-03 19:30:02 
3    200         Loremipsum3    2013-03-01 19:25:02

表共享

id    user_id     target_id     post_id    datetime
1     100         200           2          2013-02-01 19:25:02
2     100         200           3          2013-02-01 19:24:02
3     200         100           1          2013-01-01 19:25:02

假设我想为我的用户 100 获取所有结果,所需的结果将是

id   user_id     content        datetime
1    100         Loremipsum1    2013-03-04 19:35:02 
2    200         Loremipsum2    2013-03-03 19:30:02 
3    200         Loremipsum3    2013-03-01 19:25:02

因为用户 100 分享了用户 200 的两个帖子。

编辑:有些人认为我想偷懒,让别人为我做我的工作。所以这就是我目前在查询中的位置。

SELECT *
FROM user_stream
LEFT JOIN user_share
ON user_stream.user_id = user_share.user_id
WHERE user_id = 100

我的问题是我需要从我的 target_id 而不是我的 user_id 中选择内容。但我不知道 target_id 值。它也可以是多个值(如果用户共享多个帖子)。

最佳答案

不完全确定我理解您要查找的内容,但要获取用户创建或共享的帖子列表,您可以使用 UNION 合并结果。像这样:

SELECT *
FROM (
    SELECT id, user_id, datetime, 'P' as type
    FROM post
    UNION 
    SELECT post_id, user_id, datetime, 'S' as type
    FROM share
) t
WHERE user_id = 100
ORDER BY datetime 

类型告诉您它是帖子还是分享。


编辑:根据您的评论,您似乎只想要这些帖子。试试这个:

SELECT *
FROM post
WHERE id IN (
    SELECT id
    FROM post
    WHERE user_id = 100
    UNION 
    SELECT post_id
    FROM share
    WHERE user_id = 100
)
ORDER BY datetime 

关于mysql - 在这种情况下什么是合适的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16764830/

相关文章:

mysql - 使用 R 包 RJDBC 重命名 MySQL select 语句中的列

mysql - 无法在linux centos 7版本上安装percona mysql

php - 从动态下拉菜单查询 MYSQL 数据库

php - WAMP/MySQL 错误语言不正确

mysql - 为什么文本列在 MySQL 中不能有默认值?

mysql - 如何为营业时间设计表结构

php - 循环调度器填写 "byes"

MySQL - 使用连接获取两个表上两组数据之间的差异?

Php 在函数代码中?

Python MySQL-Connector 需要一分多钟才能打开连接