请参阅下面的SQL查询。我正在尝试创建一个简单的活动源,以便将任务表中updated_by
和/或created_by
字段(以较新者为准)中正在记录的人员的个人资料图片与用户表中的个人资料图片相匹配。这个查询是有效的,除非我在两个字段有不同用户时得到重复,因为在ON子句中,OR语句的两个元素都会返回true,因为总有一个created_by
会匹配用户表中的某个人 - 我无法弄清楚如何当这两个字段用不同的用户填充时,将其限制为一个。我已经尝试在ON子句中添加更多的CASE WHENs,但是没有if/else逻辑,所以它只是默认为true,并返回相同的结果。使用INNER JOIN和ON防止重复使用此SQL查询
(请注意,我需要保持限制与形式传入变量状态的项目在WHERE子句中的结果的能力,查询包含在PHP函数中。)
想法?
SELECT tasks.*, users.profile_pic,
CASE WHEN tasks.updated_at > tasks.created_at
THEN tasks.updated_at
ELSE tasks.created_at
END AS recent_activity
FROM tasks
INNER JOIN users
ON tasks.updated_by = users.name OR tasks.created_by = users.name
WHERE status <> :status1 AND status <> :status2
ORDER BY recent_activity DESC LIMIT 10'
created_by会比updated_by更新吗? – Uueerdo
在SELECT子句中使用ON子句中的相同CASE语句。 –
@Uueerdo包含所有的任务,是创建的项目可以比新的更新,因为新的项目会经常进行。对于单个任务,更新的时间戳总是比创建的更新。 – seibzehn