2012-05-10 5 views
0

次のクエリはphpMyAdminで機能しますが、PHPのWebサイトから実行すると機能しません。MySQLクエリはphpMyAdminでは機能しますが、サイトでは機能しません。 'where句'の中の未知のカラム 'zone'

SELECT * FROM 
     (SELECT name, zone FROM staff 
     LEFT OUTER JOIN zones 
      ON staff.suburb=zones.suburb 
    ) A WHERE zone='2' 

次のクエリはまた、ウェブサイト上で動作しますが、phpMyAdminをして動作しません:

SELECT name, zone FROM staff 
    LEFT OUTER JOIN zones 
    ON staff.suburb=zones.suburb 
    WHERE zone='2' 

の両方がエラーを与える:私はここで間違って

Unknown column 'zone' in 'where clause'.

何をしているのですか?

+0

クエリしているテーブルに「ゾーン」という列がありますか?おそらくあなたはその列を作成するときにタイプミスをしましたか? – Darvex

+1

コードに「二重引用符」を入れて、正しいデータベースに接続するようにしてください。また、 'zone'の代わりに' zones.zone'を試すこともできます。 – Quasdunk

+0

phpMyAdminには「PHPの書き出し」機能があります。それを使用したのか、それともコピー&ペーストしましたか? – ccKep

答えて

0

あなたが提供する方法を最初のクエリを実行したい場合は、それがあるべきより多くのこのような:

SELECT * 
FROM (
    SELECT name,zone 
    FROM staff 
    LEFT OUTER JOIN zones ON staff.suburb=zones.suburb 
) A 
WHERE A.zone='2' 

しかし、私はば完全にあなたはSUB-SELECTをやっている理由を理解していないが、それは全く不要です。 2番目のクエリは、誤植をしていない限り動作します。また、そうのような、良いすべての列をエスケープする練習、またはクエリで使用されるテーブル名です:列zoneがテーブルstaffであるとすると

SELECT `name`, `zone` 
FROM `staff` AS s 
LEFT OUTER JOIN `zones` AS z ON `s`.`suburb`=`z`.`suburb` 
WHERE `s`.`zone`='2'; 

SELECT `name`, `zone` 
FROM `staff` s 
LEFT OUTER JOIN `zones` z 
    ON s.`suburb` = z.`suburb` 
WHERE z.`zone` = '2' 
+0

すべての列をエスケープするとどういう意味ですか? – user1034912

+0

@ user1034912これは、すべての列名またはテーブル名を逆引用符で囲むことを意味します。上の例のように... – shadyyx

0

これを試してみてください。それはテーブルzonesでいた場合は、WHEREへの変更:

WHERE `z`.`zone`='2'; 

ここで重要な部分は、WHERE句の精度です。たぶんMySQLはどこのテーブルを調べるべきかわからないので、テーブルに精度を加えることでリスクが軽減されます。さらに、この列がそのテーブルに存在するようにしてください(また、そのタイプミスでzonesまたはZoneがエラーにつながる可能性があります)。

関連する問題