• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPからSQL文で〇〇か〇〇か〇〇という時に)

PHPでのSQL文で特定の条件を判別する方法について

このQ&Aのポイント
  • PHPからSQL文で特定の条件を判別する方法について質問です。具体的には、ユーザーIDとユーザーのレベルを判別し、それに応じて抽出する方法について知りたいです。
  • 現在、セッションを使用してユーザーIDとユーザーのレベルを取得しています。そして、IDが特定の値であり、かつレベルが2、3、4の場合に抽出したいと考えています。
  • 現在、下記のようなSQL文を使用して条件を判別しています。 SELECT * FROM users WHERE id = ? AND level = ? この文を使用することで、指定したIDとレベルのユーザーを抽出することができます。 しかし、ORを使用して複数の条件を指定したい場合、どのように書くのが適切でしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

どちらかというとPHPやPDOの問題ではなく、SQL単体での問題ですね。 $level2 = 2; $level3 = 3; $level4 = 4; SELECT * FROM users WHERE id = ? AND level IN (?, ?, ?) $stmt->bindValue(1, $id, PDO::PARAM_INT); $stmt->bindValue(2, $level2, PDO::PARAM_INT); $stmt->bindValue(3, $level3, PDO::PARAM_INT); $stmt->bindValue(4, $level4, PDO::PARAM_INT); とかでいいのでは。 数値項目ならBETWEENでもいいし。 ?に値をバインドしているだけなので、同じ値をバインドしても意味ないと思いますよ。

milkkokoa94856
質問者

お礼

ご回答ありがとうございました。 ずばり解決できました、INの使い方を把握しておらず勉強になりました。 ありがとうございました。

その他の回答 (1)

回答No.2

> IDはセッションを入れレベルに2と3と4の人を こう書かれるとAND なのか ORなのか判別できません。 例があるのでORの場合で話を進めます。 > WHERE id = ? AND level = ? OR id = ? AND level = ? OR id = ? AND level = ? OR id = ? AND level = ? これちゃんと意図した通り動きますかね…。 自分ならこうします。 WHERE (id = ? AND level = ?) OR (id = ? AND level = ?) OR (id = ? AND level = ?) OR (id = ? AND level = ?) 括弧を付けておく方が、後で見やすいし、DBも確実に抽出してくれるでしょう。 ただ、この場合 WHERE id = ? AND level IN(2,3,4) だともっと見やすいですね。

milkkokoa94856
質問者

お礼

ご回答ありがとうございました、INの使い方がわかっておらずORで無理やりやろうとしてました、ありがとうございました。 ほぼ同時に投稿頂いたのですが1番に回答頂きました方にベストは付けさせて頂きました。 ご回答頂きありがとうございました。

関連するQ&A