0
ようなクエリ:なぜ言語制御文をプログラミングする代わりにCASE WHENを使用するのですか?
query = "SELECT user_id FROM users WHERE lang = %s ORDER BY CASE WHEN %s <> NULL THEN location <-> %s ELSE RANDOM() END LIMIT 1"
query(query, lang, location, location)
は(のpythonを使用して)のように書くことができます:それはこのような何かを行うことは可能だとき
location = ...
order = "RANDOM()" if location is None else "location <-> %s"
order_args = [] if location is None else [location]
query = "SELECT user_id FROM users WHERE lang = %s ORDER BY "+order+" LIMIT 1"
query(query, lang, *order_args)
はなぜ、 "CASE" SQLこの場合に使用する必要があります、SQLインジェクションから安全でクエリをきれいに保つことができますか? プロとコントロにはいくつかありますか?
クエリにCASEがはるかに多い場合は、よりクリーンなソリューションになる可能性があります。
データベースは、 'order by'を行うほうがはるかに高速です。特に、このクエリの元のバージョンは1行しか返しませんでした。データベースとアプリケーションの間で余分なデータ移動を行わないことに大きな節約があります。 –
@GordonLinoff申し訳ありませんが、私はいくつかのエラーを修正してメッセージを編集しました。はい、私は1行のために私のクエリを制限しました(私も今も追加)しかし、私の質問はより一般的でした:なぜ私は "ピース"を追加するためにフォーマットするPython文字列を使用することができます非常に長いSQL文字列を書く "ケース" SQLを使用する必要があります文字列?最終結果は非常に同じクエリであり、より読みやすくする必要があります – 91DarioDev
https://dba.stackexchange.com/questions/160237/does-it-make-sense-to-have-case-end-in-an-order- 〜によって – joanolo