- ベストアンサー
SQL文のあいまい検索で・・
初心者ながらの質問ですみません。 いくつか検索条件を入力し、該当するものを取り出したいのですがうまく取れません。 状況として1ユーザーに対して3箇所のカラム(price1,price2,price3)のいずれかに数字が入っており、それの数字に対して*円以上のものという検索をかけたいのです。 現状では select * from テーブル名 where price1>='$price' or price2>='$price' or price3>='$price' という状態なのですが、エラーは出ずに関係ないものまで取ってきてしまう状態です。 どなたかお分かりになる方がいらっしゃいましたら是非ご教授願います。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
あ、さっそくレスどうもです~。 ええと、ご質問の件ですが… これは、データの「型」がからんでいるようです。ご質問に有った SQL 文の where 句を(変数を使わず)具体的な値で書くと (仮に $price には 100 が入っているとします) 「… where price1 >= '100' …」(「'」あり) となります。もし このテーブルのカラム「price1」のデータ型が文字だったらこれでOKなのですが、数値だったら 「… where price1 >= 100 …」(「'」なし) としないと、正しい SQL 文にはならない(大小判断を誤る、またはエラーになる)のです。 それにしても「あぁ、動いた動いた、バンザイ!」で終わりにせずに、少しでも疑問に思ったことは尋ねてみる…という mahimahi02 さんの姿勢は、すごく良いと思いますよ。きっと mahimahi02 さんは良いエンジニアになることができるでしょう。 もし追加でご質問あれば、お気軽にどうぞ。
その他の回答 (2)
- donne-moi
- ベストアンサー率33% (3/9)
「'」で囲むと文字列としてSQLは判断します。 金額は、文字列ではなく数値型か金額型でとっていると思うので、 「'」で囲むと意味が違うものになってしまいます。
お礼
ご返答ありがとうございました。 てっきりカラムの型がテキスト型でしたので''で括るものと思ってました。 無事解決できましたのでありがとうございました!
- hkd9001
- ベストアンサー率48% (99/204)
こんにちは。 さて私が思いますに、where句がエラーで無視されて、データがたくさん出てきてしまうのでしょうね。もしこの SQL 文を変数に入れて使ってらっしゃるのなら $sql = "select * from テーブル名 where price1 >= '".$price."' or price2 >= '".$price."' or price3 >= '".$price."'"; として、やってみてください。それでもダメなら $sql = "select * from テーブル名 where price1 >= ".$price." or price2 >= ".$price." or price3 >= ".$price; をお試しください。
お礼
ご解答ありがとうございました! 無事、2つ目で完成する事が出来ました。 ちなみに他の変数では上記のような書き方で問題ないのに今回はこんなことになったのでしょうか・・ 理由が不明だったのでもしよろしければ教えてください。
お礼
度々の解答ありがとうございます。 なるほど。カラムがTEXT型だったのでてっきり全部に''をつけるものだと思ってました。 たいへん参考になりました。ありがとうございます!