我在网站上研究了相关问题但未能找到解决方案。我所拥有的是MySQL中的用户活动表。它列出了照片社区网站中用户的所有类型的事件。根据发生的事件,我需要查询其他用户的某些数据。
我将通过两个例子以更实际的方式解释它。首先,一个简单的事件,用户加入了该网站。这就是活动表中的行的样子:
活动:注册
user_id: 19(用户表的外键)
日期:当前日期
image_id: null,因为此事件与图像
查询这个很简单。现在需要查询额外数据的事件。此事件表示上传图像的用户:
事件: IMAGEUPLOAD
user_id: 19(用户表的外键)
日期:当前日期
image_id: 12
第二个事件需要连接到图像表以从该表中获取图像URL列。第三个事件可能是评论投票,我需要在评论表中加入以获得额外的列。
本质上,我需要一种方法来根据事件类型有条件地选择每行的额外列(而不是行)。当列来自同一个表时,这很容易做到,但我正在努力使用来自其他表的连接来完成此操作。我希望在不使用存储过程的情况下在一个条件查询中执行此操作。
这可能吗?
答案 0 :(得分:1)
您可以使连接取决于事件类型,例如:
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
答案 1 :(得分:0)
无法准确地完成您想要做的事情。 SELECT用于返回元组/行的列表,每个元素/列的元素/列数相同。
你在这里真正要做的是收集2种不同类型的信息,无论如何你将不得不分别处理2种不同的信息,这应该暗示你做了一些稍微错误的事情。相反,单独拉出各种事件类型,执行您需要执行的任何其他操作以将它们转换为您的公共输出类型(例如,HTML,如果这是针对网站),然后在该阶段将它们交错。