重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

// SQL 文を準備
$sql = 'SELECT * FROM product WHERE 1
AND cat_01 = ' . $key_01 . '
AND cat_02 = ' . $key_02 . ';


$key_01, $key_02 はそれぞれ、0 から 2 の数字と空が入ります。

cat_01, cat_02 には、0 から 2 の数字の入ってる tinyint(1)カラムです。

$key_01 が空の時や、$key_02 が空の時に、それぞれに対応するカラムの全データを出力したいのですが、どのように SQL 文を書けば良いかがわかりません。
詳しい方おりましたら、ご教授下さい。

宜しくお願い致します。

mysql Ver 8.0.16

質問者からの補足コメント

  • うーん・・・

    null です、失礼致しました。
    ただ、SQL 文が難しく null の時、cat_01 カラム全検索になるという文が思いつきません。

    $sql = 'SELECT * FROM product WHERE 1 AND cat_01 = ' . $key_01 . ' OR cat_01 IS NULL';

    No.1の回答に寄せられた補足コメントです。 補足日時:2019/07/08 22:18

A 回答 (2件)

ちょっと読み違いしていたようです。

申し訳ありません。

PHP (だと思う) の 変数 $key_01 の内容が空 ($key_01 == '' ) の場合、cat_01での絞り込みはしない、
ということでしょうか。

確実なのは、PHP側にif文等で cat_01 = ? という 条件自体をSQLに含めないようにする、というものです。

うまく工夫して
(cat_01 = ? +0 or '?'='' )
という状態にすることで
 $key_01に数値が入っている(例: 1) → cat_01 = 1 +0 が有効 '1' = '' は常にFalseだが、判定に影響しない
 $key_01が空→ '' = '' が常にTrueになる。 cat_01 = +0 は影響しない。
という動作にはなります。
ただ、効率的かどうかパフォーマスがいいかどうかは疑問です。
    • good
    • 0
この回答へのお礼

ご回答頂きありがとうございます。
中々、伝えにくい内容で文章力も無く、
PHP であることを書かず失礼致しました。
参考にさせていただきます。

お礼日時:2019/07/08 23:53

「空」とは、どんな状態のことでしょうか?


null のことなら、 is null が使えます。
そうでないなら、「空」の内容がわかれば、それを検索するための条件がわかると思います。
この回答への補足あり
    • good
    • 0
この回答へのお礼

追加のお礼です。

お礼日時:2019/07/08 23:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す