「SQLコーディングスタイル」の版間の差分
Mitsuhiro Yoshida (トーク | 投稿記録) |
Mitsuhiro Yoshida (トーク | 投稿記録) |
||
36行目: | 36行目: | ||
</code> | </code> | ||
== | ==インデント== | ||
[[File:sql_indentation.png]] | [[File:sql_indentation.png]] |
2021年2月16日 (火) 11:41時点における版
作成中です - 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));
インデント
サブクエリ Subqueries
There are no strict rules for subquery indentation, the deciding factor is good readability - see MDLSITE-1914. サブクエリのインデントには厳密なルールはありません。読みやすさが極めてです - MDLSITE-1914をご覧ください。