使用位置选择MD5 + CONCAT

时间:2013-11-01 13:54:55

标签: mysql md5 concat

哪里有问题? 选择工作正常..当检查在哪里 - 给出错误 'where子句'中的未知列'确认'

 SELECT 
    users_id, MD5(CONCAT(users_pass, users_email)) AS confirm
FROM
    (users_items) 
WHERE users_active = 0 
    AND confirm = '39a5eccb97f63a2bb649ddd95c5a3ba7' 
LIMIT 1 

2 个答案:

答案 0 :(得分:7)

因为确认是alias

您无法在相同级别的查询alias子句中使用where

你必须做

where xxx
and MD5(CONCAT(users_pass, users_email)) = '39a5eccb97f63a2bb649ddd95c5a3ba7'

或者,如Vatev所述,您可以在HAVING子句中使用别名。但使用HAVING子句可能会对性能产生影响。

导致查询过滤器(例如,尝试使用索引)和HAVING子句过滤这些过滤数据的原因。

where xxx
HAVING confirm = '39a5eccb97f63a2bb649ddd95c5a3ba7'

答案 1 :(得分:0)

SELECT 
    users_id,
    MD5(CONCAT(users_pass, users_email)) AS confirm
FROM
    (users_items) 
WHERE
    users_active = 0 
    AND MD5(CONCAT(users_pass, users_email)) = '39a5eccb97f63a2bb649ddd95c5a3ba7'
LIMIT 1

对于HAVING子句,AFAIK,它仅与GROUP BY一起使用。

添加了:

“通常,使用的子句必须完全按照语法描述中显示的顺序给出。例如,HAVING子句必须在任何GROUP BY子句之后和任何ORDER BY子句之前。”

“不要对应该在WHERE子句中的项目使用HAVING。例如,不要写下以下内容:

SELECT col_name FROM tbl_name HAVING col_name > 0;

改为写下:

SELECT col_name FROM tbl_name WHERE col_name > 0;"

这些是来自http://dev.mysql.com/doc/refman/5.0/en/select.html的引文。