ホームページ >データベース >mysql チュートリアル >単一行の SQL クエリが失敗した場合にデフォルト値を返す方法は?
単一行クエリが失敗した場合にデフォルト値を返す
SQL クエリを実行して特定のデータを取得する場合、対応する行が存在しない状況がよく発生します。存在します。空の結果が返されないようにするには、デフォルト値を指定するとよいでしょう。
ストリームの次にスケジュールされたアイテムを取得する次の SQL ステートメントを考えてみましょう。
<code class="sql">SELECT `file` FROM `show`, `schedule` WHERE `channel` = 1 AND `start_time` <= UNIX_TIMESTAMP() AND `start_time` > UNIX_TIMESTAMP()-1800 AND `show`.`id` = `schedule`.`file` ORDER BY `start_time` DESC LIMIT 1</code>
一致する行が存在しない場合見つかった場合、このクエリは空の結果を返します。ただし、スケジュールされた項目がない場合にストリームで何かが再生されるようにするには、代わりにデフォルト値を返すことができます。
これを実現する 1 つの方法は、IFNULL 関数または COALESCE 関数を使用することです。これらの関数内で元のクエリをラップすることで、行が見つからなかった場合に返されるデフォルト値を指定できます:
<code class="sql">SELECT COALESCE(`file`, 'default.webm') FROM `show`, `schedule` ...</code>
<code class="sql">SELECT IFNULL(`file`, 'default.webm') FROM `show`, `schedule` ...</code>
ただし、これらの試行は、行が見つからない場合には空の結果になります。行が見つかりました。この問題に対処するためのより効果的な手法は、MIN のような集計関数を IFNULL とともに使用することです。
<code class="sql">SELECT IFNULL(MIN(`file`), 'default.webm') `file` FROM `show`, `schedule` WHERE `channel` = 1 AND `start_time` <= UNIX_TIMESTAMP() AND `start_time` > UNIX_TIMESTAMP()-1800 AND `show`.`id` = `schedule`.`file` ORDER BY `start_time` DESC LIMIT 1</code>
集計関数 MIN を使用すると、レコードがない場合に NULL の結果が確実に得られます。が選択されます。この NULL 値は、IFNULL によって提供されるデフォルト値に置き換えられます。
以上が単一行の SQL クエリが失敗した場合にデフォルト値を返す方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。