2

どこの問題?select work fine.. where をチェックインするとき - エラー Unknown column 'confirm' in 'where clause' を与える

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

2 に答える 2

9

ですので確認ですalias

同じレベルの queryaliaswhere節でan を使用することはできません。

あなたがしなければなりません

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

または、Vatev が述べたように、HAVING句でエイリアスを使用できます。ただし、HAVING句を使用すると、パフォーマンスに影響を与える可能性があります。

where がクエリをフィルター処理し (たとえば、インデックスを使用しようとしている)、HAVING 句がこれらのフィルター処理されたデータをフィルター処理している原因です。

where xxx
HAVING confirm = '39a5eccb97f63a2bb649ddd95c5a3ba7'
于 2013-11-01T13:56:51.987 に答える
1
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 句については、知る限り、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からの引用です。

于 2013-11-01T14:02:55.070 に答える