MySQL CASE 查询与 INNER JOIN

标签 mysql sql

我有 1 个字符串类型的表。 (照片添加、照片评论等) 然后我还有另外 4 个与这些类型连接的表。

我需要进行一个查询,根据类型从所有这些表中选择数据。

我创建了这个,但它不起作用。

SELECT DISTINCT a.id, a.event, a.params, a.created_at, a.item_id, a.sender_id, a.receiver_id, u.name, u.id as userid 
FROM `eva49_lovefactory_activity` a, eva49_users u 
CASE a.event 
  WHEN "photo_add" THEN 
    INNER JOIN eva49_lovefactory_photos lp ON lp.id = a.item_id AND lp.fsk18 = -1
  WHEN "group_create" THEN 
     INNER JOIN eva49_lovefactory_groups lg ON lg.id = a.item_id AND lg.fsk18 = -1 
  WHEN "photo_comment" THEN 
     INNER JOIN eva49_lovefactory_item_comments lic ON lic.item_id = a.item_id AND lic.fsk18 = -1 
  WHEN "profile_comment" THEN 
     INNER JOIN eva49_lovefactory_item_comments lic ON lic.item_id = a.item_id AND lic.fsk18 = -1 
  WHEN "profile_comment" THEN 
    INNER JOIN eva49_lovefactory_profiles lp ON lp.user_id = a.receiver_id AND lp.status_fsk18 = -1 
  ELSE 1=1 
END 
WHERE (u.id = a.sender_id OR u.id = a.receiver_id) and (u.id <> 379) 
ORDER BY a.created_at DESC LIMIT 0, 10

有什么办法可以配对表格吗?数据库结构是这样给我的。

编辑:

有一个表“eva49_lovefactory_activity”,其中包含有关最近事件的信息。它有一个“事件”列,其中包含带有事件名称的字符串(photo_add、photo_comment 等)

还有其他表 - eva49_lovefactory_photos、eva49_lovefactory_profiles、eva49_lovefactory_groups 等。在这些表中,我必须查找该项目是否已获得管理员批准。如果是的话我可以展示一下。 (fsk18 = -1)

最佳答案

将 CASE 条件移至 JOIN 条件并执行 LEFT JOIN..

SELECT DISTINCT a.id, a.event, a.params, a.created_at, a.item_id, a.sender_id, a.receiver_id, u.name, u.id as userid 
FROM `eva49_lovefactory_activity` a, eva49_users u 

    LEFT JOIN eva49_lovefactory_photos lp ON lp.id = a.item_id AND lp.fsk18 = -1
               AND a.event='photo_add'
    LEFT JOIN eva49_lovefactory_groups lg ON lg.id = a.item_id AND lg.fsk18 = -1 
               AND a.event='group_create'
    LEFT JOIN eva49_lovefactory_item_comments lic ON lic.item_id = a.item_id AND 
              lic.fsk18 = -1     AND a.event='photo_comment'
    LEFT JOIN eva49_lovefactory_item_comments lic ON lic.item_id = a.item_id AND 
              lic.fsk18 = -1     AND   a.event='profile_comment'

WHERE (u.id = a.sender_id OR u.id = a.receiver_id) and (u.id <> 379) 
ORDER BY a.created_at DESC LIMIT 0, 10

关于MySQL CASE 查询与 INNER JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22907263/

相关文章:

php - ADODB - 从 Mysql 切换到 Mysqli

python - 将 datetime.timedelta() 添加到 python mysql 查询

mysql - 选择DML还是DDL?

mysql - 创建具有相同列的两个表的 View

sql - 尝试使用 xp_cmdshell 移动文件时访问被拒绝

php - CakePHP 数学计算领域?

php - cakephp hasone 和属于加入不工作

SQL优化: deletes taking a long time

php - 按连续多个日期中最旧的日期排序

mysql - 如何按两个字段排序?数据库