从某事物中选择,选择案例然后比较

时间:2013-11-20 13:55:26

标签: php sql

如果用户状态在数据库中发生了变化,我想知道

我在这里有这个代码

SELECT `users`.`status`,`users`.`id_user`,
(SELECT CASE 
            WHEN `timestamp` >= "2013-11-20 15:30:36" 
                THEN 2
            WHEN `timestamp` >= "2013-11-20 15:30:51" 
                THEN 1
            ELSE 0
            END AS `status1`
            FROM `users_actions` as `users_actions`

            ORDER BY `timestamp` DESC
            LIMIT 1) as `status1`
FROM `users` as `users` WHERE id_user IN (5,22) 
    AND `users`.`status` != `users`.`status1`

它给了我这个错误      Unknown column 'users.status1' in 'where clause'

我的问题是如何将临时元素与列

进行比较

1 个答案:

答案 0 :(得分:2)

您的子查询具有status1的别名,并且您的case语句的别名为status1,因此要在子查询之外引用该字段,它将是 status1.status1 而不是user.status1

更新(2013年11月21日)

SELECT users.status,
users.id_user,
status1.status1
FROM users as users
,(SELECT CASE 
        WHEN users_actions.timestamp >= "2013-11-20 15:30:36" 
            THEN 2
        WHEN users_actions.timestamp >= "2013-11-20 15:30:51" 
            THEN 1
        ELSE 0
        END AS status1
        FROM users_actions as users_actions
        ORDER BY users_actions.timestamp DESC
        LIMIT 1) as status1
WHERE users.id_user IN (5,22) 
AND users.status != users.status1

我使用您创建的别名更新了您的查询,以确保一切正常。如果您不打算使用它们,为什么要创建别名?我还重新安排了你的FROM语句,看看是否能解决这个问题。