2013-11-20 42 views
-2

我想如果用戶身份在數據庫中已經改變從一些選擇,選擇的情況下再比較

我這裏有這個代碼

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'

我的問題是如何比較一個臨時元素與列

+0

你如何將用戶鏈接到時間戳? END後的AS狀態1是否必要?我不認爲用戶可以做任何事情。 – Fredd

+0

是的,它沒有做任何事情,但我嘗試了很多東西,我忘記了拿出srry:D ..但我怎麼能得到SQL以某種方式工作? – Crustamet

回答

0

你子查詢有一個別名status1和你的case語句具有狀態1的別名,所以引用子查詢之外的那場這將是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語句,看看是否照顧到了這個問題。

+0

它不工作,我改變了最後一行AND'用戶'''狀態'!='status1'.'status1'它給了我'未知列'status1.status1在'where子句' – Crustamet

+0

更新了我的答案。 –