-1

我有两个表,表 reseau_stream 有关于我的用户帖子的不同信息。用户可以分享其他人的帖子。表 reseau_share 建立了这种联系(您有下面两个表的详细信息)。现在,如果用户分享其他人的帖子,我必须使用 reseau_share 的日期时间来订购我的查询。

我没有太多的 MySQL 技能,但在一些帮助下,我终于得到了下面的查询。仅当 reseau_share 中有一行时它才有效。如果 reseau_share 为空,则查询返回 0 结果。我真的不明白为什么。任何人都可以找出原因吗?干杯。

表 reseau_stream

id   user_id     content        datetime
1    100         Lorem Ipsum1   2013-03-04 19:35:02
2    100         Lorem Ipsum2   2013-03-04 12:35:02

表 reseau_share

 id    user_id     target_id     stream_id    datetime
 -------------------- EMPTY ------------------------

查询

SELECT reseau_stream.id,
       reseau_stream.user_id,
       reseau_stream.content,
       IF(reseau_stream.user_id = 100, reseau_stream.datetime, reseau_share.datetime) as datetime 
       FROM reseau_stream, reseau_share 
       WHERE reseau_stream.id 
       IN (
           SELECT id
           FROM reseau_stream
           WHERE user_id = 100
           UNION 
           SELECT stream_id
           FROM reseau_share
           WHERE user_id = 100
        )   ORDER BY  datetime DESC;
4

2 回答 2

2

非空集与空集的笛卡尔积是空集。

一条语句中的多个表FROM使用上述规则连接两个表,在您的情况下最终结果为 0。

于 2013-05-27T03:32:12.973 回答
2

基本上看起来你需要一个LEFT JOINon reseau_share。现在您有 a FULL OUTER JOIN,正如@diegoperini 所指出的那样,(a)导致零行,并且(b)可能不是您真正想要的。目前还不清楚哪一列与这两个表相关。我猜是user_id

SELECT
  reseau_stream.id,
  reseau_stream.user_id,
  reseau_stream.content,
  IF(reseau_stream.user_id = 100, reseau_stream.datetime, reseau_share.datetime) as datetime 
FROM reseau_stream
LEFT JOIN reseau_share ON reseau_stream.user_id = reseau_share.user_id
WHERE reseau_stream.id 
  IN (
      SELECT id
      FROM reseau_stream
      WHERE user_id = 100
      UNION 
      SELECT stream_id -- or whatever 
      FROM reseau_share
      WHERE user_id = 100
  )
ORDER BY datetime DESC;
于 2013-05-27T03:36:41.167 回答