単一行クエリが失敗した場合にデフォルト値を返す
SQL クエリを実行して特定のデータを取得する場合、対応する行が存在しない状況がよく発生します。存在します。空の結果が返されないようにするには、デフォルト値を指定するとよいでしょう。
ストリームの次にスケジュールされた項目を取得する次の 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
一致する行が見つからない場合、このクエリは空の結果を返します。ただし、スケジュールされた項目がない場合にストリームで何かが再生されるようにするには、代わりにデフォルト値を返すことができます。
これを実現する 1 つの方法は、IFNULL 関数または COALESCE 関数を使用することです。これらの関数内で元のクエリをラップすることで、行が見つからない場合に返されるデフォルト値を指定できます:
SELECT COALESCE(`file`, 'default.webm')
FROM `show`, `schedule` ...
SELECT IFNULL(`file`, 'default.webm')
FROM `show`, `schedule` ...
ただし、行が見つからない場合は、これらの試行でも空の結果が得られます。この問題に対処するためのより効果的な手法は、MIN のような集計関数を IFNULL:
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
集計関数 MIN を使用すると、レコードが選択されていない場合に確実に NULL の結果が得られます。この NULL 値は、IFNULL.
によって提供されるデフォルト値に置き換えられます。免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3