按日期和条件关联两个表

时间:2014-03-26 00:26:05

标签: mysql sql

我有一个我想要做的声明的问题,并且如果可以做的话就是idk,我告诉他们: 我正在建立一个系统,就像一堵墙,所有出版物都是用户。用户可以发布内容,所有人都可以看到。 我所做的就是给出一份出版物分享并发送到我的脑海里,在我的脑海里只是我的帖子,我想要这些也是我必须“分享”的出版物。我的桌子的例子......

表格出版物。

id_publication 发布时间 用户 日期

表共享

id_shared id_publication 用户 日期

SELECT *
  FROM publication
 WHERE id_publication IN
       (SELECT id_publication FROM shared WHERE user = '$user')
    OR user = '$user'
 ORDER BY date DESC

当我提供发布共享时,插入共享我正在共享的帖子的ID,他共享的用户以及他共享的日期的表。 好吧那就在那里,在我的脑海里应该只出现我的出版物,我给了她分享。 使用此声明:

通过该声明,我列出了我的出版物,并通过发布日期(非常好)给出了她的份额,但我想要的是我为这些出版物采用共享表的日期。除了我的出版物之外,我分享的日期,而不是公众的日期。 它将获取那些id_publicacion(我共享)和其他人(可能是我的出版物)共享表的日期,以获取已发布表的发布日期。

欢迎任何回复。非常感谢你阅读。

1 个答案:

答案 0 :(得分:1)

使用连接而不是子查询重写。

SELECT * 
FROM publication p
JOIN shared s ON s.id_publication = p.id_publication
WHERE s.user='$user'
OR p.user='$user' 
ORDER BY s.date DESC

这将为您提供共享和发布日期,以便与您合作。

- 编辑 -

将代码移到此处以便更具可读性。

SELECT  p.id_publication
        , p.Published
        , p.user
        , p.date
        , s.id_shared
        , s.id_publication
        , s.user
        , s.date 
FROM publication p
LEFT JOIN 
        (SELECT *
        FROM shared
        WHERE user = '$user') s
    ON p.id_publication = s.id_publication
WHERE p.user = '$user' 
  OR  s.user is not null
ORDER BY ifnull(s.date, p.date) DESC