【问题标题】:Mysql get latest row of self referencing relationshipMysql获取最新一行的自引用关系
【发布时间】:2014-05-14 13:07:02
【问题描述】:

我有一个 cmets 表,允许人们编辑他们的 cmets。 我没有覆盖 cmets,而是创建了一个新注释并将其关联到它的“父级”。 此外,我将子信息添加到父级。

id, user_id, comment_id__parent, comment_id__child, comment, created_dt

SQL Fiddle here

现在我的问题是我想获取特定用户的所有 cmets,但只获取评论的最新更新。

这让我头疼了一阵子,非常感谢您的意见!

【问题讨论】:

标签: mysql innodb self-referencing-table


【解决方案1】:

如果你的小提琴是正确的,你应该可以这样做:

SELECT * FROM comments 
 WHERE comment_id__child IS NULL AND user_id=1;

如果您在编辑时始终为“父”注释填充comment_id__child,则此方法有效。

【讨论】:

  • 你忘记了 Order By 子句吗?
  • @RonakShah, ORDER BY 不是绝对必要的,除非返回预期结果。当然,如果需要,它也可以包含在内。
  • 他想要最新的 cmets 这就是为什么你需要通过 created_dt desc 添加订单
  • 否,“我想获取特定用户的 所有 cmets,但只获取 最新更新”,因此不需要 ORDER BY .
  • 谢谢。您的回答帮助我找到了解决方案!
【解决方案2】:

对于 uer_id =1

select * from comments where user_id=1 order by created_dt desc;

【讨论】:

    【解决方案3】:

    这很完美!你可以在你的 sql fiddle 中看到结果。

    select * from comments group by user_id having count(id) = 1
    UNION
    select * from comments where user_id in (select user_id from comments group by user_id having count(id) > 1) and comment_id__child is null and comment_id__parent is not null;
    

    【讨论】:

      【解决方案4】:

      我想我找到了解决办法:

      SELECT *
      FROM comments
      WHERE user_id = 1
        AND ( (comment_id__parent IS NULL
               AND comment_id__child IS NULL)
             OR (comment_id__parent IS NOT NULL
                 AND comment_id__child IS NULL) )
      ORDER BY created_dt DESC
      

      【讨论】:

      • 这仅适用于用户 id 1。如果您需要查看所有用户的结果,可以查看我的评论。效果很好。
      猜你喜欢
      • 1970-01-01
      • 2012-12-21
      • 1970-01-01
      • 2021-05-14
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 2013-09-14
      • 1970-01-01
      相关资源
      最近更新 更多