代码之家  ›  专栏  ›  技术社区  ›  Fer

MySQL中需要进行连接的条件列

  •  1
  • Fer  · 技术社区  · 16 年前

    我在网站上研究了相关问题,但没有找到解决方案。我拥有的是MySQL中的用户活动表。它列出了照片社区网站中用户的所有事件。根据发生的事件,我需要从其他用户查询某些数据。

    我将用两个例子以更实际的方式解释它。首先是一个简单的事件,用户加入了该站点。这是“活动”表中的行的外观:

    登记
    用户id: 19(用户表的外键)
    当前日期
    图像标识:

    质疑这一点是微不足道的。现在需要查询额外数据的事件。此事件表示上载图像的用户:

    活动: 图像上传
    19(用户表的外键)
    日期:
    12

    本质上,我需要一种根据事件类型有条件地为每行选择额外列(而不是行)的方法。当列来自同一个表时,这很容易做到,但我很难使用来自其他表的联接来做到这一点。我希望在一个无需使用存储过程的条件查询中实现这一点。

    2 回复  |  直到 16 年前
        1
  •  1
  •   Andomar    16 年前

     select     *
     from       Events e
     left join  Image i
     on         e.event = 'IMAGEUPLOAD'
     and        e.image_id = i.id
     left join  comments c
     on         e.event = 'COMMENT'
     and        e.comment_id = c.id
    

    例如,如果有一列在所有链接表之间共享 create_date coalesce 选择一个不是 NULL :

    select      coalesce(i.create_date, c.create_date, ...) as create_date
    
        2
  •  0
  •   Kylotan    16 年前

    你在这里真正做的是收集两种不同类型的信息,无论如何你都必须分别处理这两种不同类型的信息,这应该暗示你做了一些轻微的错误。相反,将各种事件类型单独拉出,执行任何需要执行的附加操作以将它们转换为通用输出类型(例如,如果是网站,则为HTML),然后在该阶段将它们交错在一起。

    推荐文章