「SQLコーディングスタイル」の版間の差分
Mitsuhiro Yoshida (トーク | 投稿記録) |
Mitsuhiro Yoshida (トーク | 投稿記録) |
||
5行目: | 5行目: | ||
完全なSQLクエリは$DB->get_records_sql()、$DB->get_recordset_sql()または$DB->execute()で使用されます。SQLフラグメントは接尾辞「_select()」を使ったDMLメソッドに使用できます。 | 完全なSQLクエリは$DB->get_records_sql()、$DB->get_recordset_sql()または$DB->execute()で使用されます。SQLフラグメントは接尾辞「_select()」を使ったDMLメソッドに使用できます。 | ||
== | == 一般規則= | ||
* パラメータプレースホルダを使用してください! | * パラメータプレースホルダを使用してください! | ||
* すべてのSQLキーワードは大文字にしてください。 | * すべてのSQLキーワードは大文字にしてください。 | ||
13行目: | 13行目: | ||
* INNER JOINの代わりにJOINを使用してください。 | * INNER JOINの代わりにJOINを使用してください。 | ||
* RIGHT JOINは使用しないでください。 | * RIGHT JOINは使用しないでください。 | ||
* | * カラムエイリアスには常にASを使用してください。 | ||
* | * テーブルエイリアスにASを使用しないでください。 | ||
* | * 値が等しくないことを判定するには「<>」を使用してください。「!=」は使用しないでください。 | ||
==二重引用符 Double quotes== | ==二重引用符 Double quotes== |
2021年2月8日 (月) 15:01時点における版
作成中です - 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を使用しないでください。
- 値が等しくないことを判定するには「<>」を使用してください。「!=」は使用しないでください。
二重引用符 Double quotes
All sql queries and fragments should be enclosed in double quotes, do not concat SQL from multiple parts if possible. The single quotes are used for sql strings, it also helps with visual highlighting and SQL code completion in some IDEs.
$records = $DB->get_records_select('some_table', "id > ?", array(111));
パラメータプレースホルダ Parameter placeholders
All variable query parameters must be specified via placeholders. It is possible to use three different types of placeholders: :named, ? and $1. It is recommended to use named parameters if there is more than one parameter.
$sql = "SELECT *
FROM {some_table}
WHERE id > :above";
$records = $DB->get_records_sql($sql, array('above'=>111));
インデント Indentation
サブクエリ Subqueries
There are no strict rules for subquery indentation, the deciding factor is good readability - see MDLSITE-1914.