2

このクエリを機能させようとしていますが、次のエラーが発生します:「havingclause」の不明な列「zips.city」

`$ query =" SELECT
    zip。*
    から
    ジップ
    持っている
    zips.city LIKE'%$ city%'
    と
    zips.stateabbr LIKE'%$ state%'
    LIMIT 1 ";
$ result = mysql_query($ query)またはdie(mysql_error()); `

私のzipテーブルにはcity列があるので、問題が何であるかわかりません。エラーなしでこのクエリを実行できるため、データベースにアクセスしていることがわかります。

$ zip1query = "SELECT
         zip。*
         から
         ジップ
         どこ
         zips.zip ='$ zip'              
         ";

アドバイスをいただければ幸いです。ありがとう!

4

4 に答える 4

6

このhaving句は、この句と同じ意味ではありませんwhere。単純なクエリを実行するときは、where-を使用する必要があります。これは、2番目のクエリで行ったことです。

havinggroup by句の結果に条件を適用する必要がある場合に使用されます。


つまり、ここでは、クエリを次のように作成する必要があります。

$query = "SELECT zips.*
    FROM zips
    where zips.city LIKE '%$city%' 
        AND zips.stateabbr LIKE '%$state%' 
    LIMIT 1";


それでも、存在しない列または見つからない列(少なくともcityおよび/またはstateabbrについてエラーが発生する場合は、その列がテーブルに存在しないことが原因です。

この場合、私たちにできることはあまりありません。テーブルの構造をチェックして、テーブルに含まれる列を判別する必要があります。

phpMyAdminなどのWebベースのツールを使用するか、次のようなSQL命令を使用して、その構造を確認できます。

desc zips;


参考までに、 MySQLのマニュアルページをselect 引用してください。

SQL標準では、HAVINGは GROUP BY 句内の列または集計関数で使用される列のみを参照する必要があります。
...句 に含める必要のあるアイテムに

は使用しないでください。たとえば、次のように記述しないでください。HAVINGWHERE

SELECT col_name FROM tbl_name HAVING col_name > 0;

代わりにこれを書いてください:

SELECT col_name FROM tbl_name WHERE col_name > 0;

... 句は集計関数を参照できますが
、句は参照 できませんHAVINGWHERE

于 2010-03-01T22:05:15.797 に答える
1

WHEREの代わりに使用してみてくださいHAVING

于 2010-03-01T22:04:57.857 に答える
1

これを行う適切な方法は、WHERE句を使用することです。

$query = "SELECT
zips.*
FROM
zips
WHERE
zips.city LIKE '%$city%' 
AND
zips.stateabbr LIKE '%$state%' 
LIMIT 1";

HAVINGは、グループ化するときに使用されます。説明については、ここを参照してください

于 2010-03-01T22:05:14.157 に答える
0

o jeez申し訳ありませんが、問題を理解しました。テーブルの列に名前を付けたときに、都市の前にスペースを入れたようです。だから私は列の名前を変更しました、そしてそれはとにかくチャップスのおかげで動作します!しかし、持っている代わりにwhere関数を使用すると、物事を大幅にスピードアップする必要があります。

于 2010-03-01T22:14:09.803 に答える