SQLコーディングスタイル

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

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

完全な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));

インデント

sql indentation.png

サブクエリ

サブクエリのインデントには厳密なルールはありません。読みやすさが決め手です - MDLSITE-1914をご覧ください。

関連情報