SQLコーディングスタイル

提供:MoodleDocs
移動先:案内検索

作成中です - Mitsuhiro Yoshida (トーク)

このページでは複雑なデータベースクエリに関する推奨コーディングスタイルを説明します。

完全なSQLクエリは$DB->get_records_sql()、$DB->get_recordset_sql()または$DB->execute()で使用されます。SQLフラグメントは接尾辞「_select()」を使ったDMLメソッドに使用できます。

= 一般規則

  • パラメータプレースホルダを使用してください!
  • すべてのSQLキーワードは大文字にしてください。
  • すべてのSQLクエリおよびフラグメントは二重引用符で囲んでください。
  • 複雑なSQLクエリは複数行に記述してください。
  • 複数行のSQLクエリは次の句で正しく位置合わせしてください: SELECT, FROM, JOIN, WHERE, GROUPY BY, HAVING.
  • INNER JOINの代わりにJOINを使用してください。
  • RIGHT JOINは使用しないでください。
  • カラムエイリアスには常にASを使用してください。
  • テーブルエイリアスにASを使用しないでください。
  • 値が等しくないことを判定するには「<>」を使用してください。「!=」は使用しないでください。

二重引用符

すべてのSQLクエリおよびフラグメントは二重引用符で囲んでください。また、可能であれば、複数にわたる部分のSQLを結合しないでください。一重引用符はSQLストリングに使用されます。また、視覚的な強調およびIDE内でのSQLコードの完了に役立ちます。

$records = $DB->get_records_select('some_table', "id > ?", array(111));

パラメータプレースホルダ

すべての変数クエリパラメータはプレースホルダで指定してください。次の3つの異なるタイプのプレースホルダを使用できます: :named, ?, $1 2つ以上のパラメータがある場合、名前付きパラメータの使用をお勧めします。

$sql = "SELECT *

         FROM {some_table}
        WHERE id > :above";

$records = $DB->get_records_sql($sql, array('above'=>111));

インデント Indentation

sql indentation.png

サブクエリ Subqueries

There are no strict rules for subquery indentation, the deciding factor is good readability - see MDLSITE-1914.

関連情報