我正在尝试为我正在建立的摄影网站建立提要。 以下是获取前一天发生的所有活动的查询。 如果在最后一天(第一个LEFT OUTER JOIN)还剩下评论,那么这非常有效,但是如果只有喜欢发生了(第二个LEFT OUTER JOIN),则返回空白。 我认为问题是,如果第一个LEFT OUTER JOIN为空,那么第二个似乎不触发。 如果我对这个假设是正确的,那么您是否知道如何使第二个点火而不考虑第一个的结果。

SELECT a.a_id
            , a.a_user_id
            , a.a_activity_type
            , a.a_activity_id
            , a.a_activity_time
            , c.ic_id 
            , c.ic_status
            , c.ic_image_id
            , c.ic_creator_id
            , c.ic_comment
            , c.ic_read_status
            , s.id 
            , s.image_id 
            , s.photographer_id
            , s.user_id
            , u.u_id
            , u.u_screen_name
            , u.u_url_screen_name
            , u.u_email
            , u.u_avatar
            , u1.u_id as currentUser
            , u1.u_email as currentEmail
            , u1.u_url_screen_name as currentScreenName
            , i.i_id
            , i.i_name
            , COALESCE(c.ic_image_id, s.image_id) as image_id
            , COALESCE(c.ic_creator_id, s.photographer_id) as other_user_id
            FROM activity AS a
                LEFT OUTER JOIN image_comments as c ON 
                a.a_activity_id = c.ic_id AND a.a_activity_type = 1
                LEFT OUTER JOIN site_likes as s ON 
                a.a_activity_id = s.id AND a.a_activity_type = 2
                LEFT JOIN users as u ON
                u.u_id = COALESCE(c.ic_creator_id, s.photographer_id)
                LEFT JOIN images as i ON
                i.i_id = COALESCE(c.ic_image_id, s.image_id)
                LEFT JOIN users as u1 ON
                u1.u_id = a.a_user_id
            WHERE a.a_activity_time >= DATE_SUB(now(), INTERVAL 1 DAY)
            AND
            COALESCE(c.ic_creator_id, s.photographer_id) != a.a_user_id
            ORDER BY a.a_activity_time DESC

更新:经过进一步测试,似乎WHERE子句中的COALESCE()是问题所在。 这些字段之一将始终具有值,而另一个字段将不会具有值。 如果我摆脱了这个问题,查询工作会很好,因为我可以按原样使用它,然后在应用程序中删除需要删除的内容,但我仍然非常希望在查询中使用它。

  ask by Donniep translate from so

本文未有回复,本站智能推荐:

2回复

MySQL对多个JOINS使用GROUP_CONCAT

我有以下四个表。 我的查询工作正常,但我需要使字段“ AUTHORIZED_VIEWER”和“ AUTHORIZED_VIEWER_EMAIL”返回所有值,而不仅仅是第一个值。 我相信这可以通过使用GROUP_CONCAT来完成,但是,我不确定该如何实现。 注–尝试使用GROUP_CONC
1回复

同一查询中的join和left-join两个语法问题

我有以下代码来创建集合: 第一个问题: 1052 on子句中的“ entity_id”列不明确: [2015-01-01 13:22:28]生产。错误:致命数据库错误:500 = SQLSTATE [23000]:违反完整性约束:1052 on子句中的列'entity_id'不明确(
1回复

用LEFT-JOIN进行缓慢的MySQL查询

我的网站-在线商店。 我需要显示类别表中的数据。 并计算该类别中的项目。 表ITEMS中的行数约为6700 。 表中的行数CATEGORY 123 我使用以下查询: 该查询执行了4秒钟以上 。 解释的结果: http : //i.gyazo.com/c71c43af271
1回复

如何更正MySQL多个JOINS查询中的列名值

我需要显示产品及其价格,以及该产品具有特定颜色和属性的当前库存(如果有)。 它部分地做了它应该做的。 这是查询的解释(或至少它应该做什么): 从store_product获取产品的基本信息 一个产品有库存。 该库存与颜色 ID 和属性详细信息 ID 相关联。 与颜色 ID 关联的产品库存可以有多
1回复

并排的两个查询-共同的月/年(MYSQL)

我试图将两个查询并排放置,它们之间有共同的月份和年份。 它们可以完美地单独工作。 Table Boxes - 每月寻找盒子 表订单 - 每月寻找订单 我已经尝试了很多使用 LEFT JOIN 的方法,但没有任何效果。 有什么建议吗?
2回复

Mysql查询Join两个表

我正在编写一个简单的聊天服务。 我想选择两个人之间的消息线程,只有发件人和收件人使用他们的用户名或用户 ID。 我在下面有我的查询。 它有一个小问题,正在返回一条消息两次。 我怎样才能解决这个问题? 例如,如果我的发件人有 uid '101' 而我的收件人有用户名 'janed',我的查询是 用户表
2回复

在另一个查询MySQL中使用来自一个查询的SUM

我有两个要一起使用的查询。 查询 1 从工资表生成数据表。 在工资表中,同一天可能有一个人的多个条目。 因此,如果 'hours_type' 相同,我希望在此查询产生结果之前将小时数加在一起。 查询 2 将为full_name和hours_type相同的重复条目添加hours 。 此查询的结果是我希
1回复

可以通过一个查询引用两个特定表

这已经涉及四个INNER JOIN和一个LEFT JOIN,但是我不确定如何再引用一个类似于LEFT JOIN表的表。 这是我当前的查询,按预期方式工作 因此,本质上每个产品都有一个类和一个变体,然后每个类都有类选项,每个变体都有变体项目。 变体有自己的变体图像,每个类都有其自己的“详