「SQLコーディングスタイル」の版間の差分

提供:MoodleDocs
移動先:案内検索
編集の要約なし
編集の要約なし
 
(同じ利用者による、間の19版が非表示)
1行目: 1行目:
作成中です - [[利用者:Mitsuhiro Yoshida|Mitsuhiro Yoshida]] ([[利用者・トーク:Mitsuhiro Yoshida|トーク]])
このページでは複雑なデータベースクエリに関して推奨コーディングスタイルを説明します。
 
このページでは複雑なデータベースクエリに関する推奨コーディングスタイルを説明します。


完全な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メソッドに使用できます。


== 一般規則 General rules==
== 一般規則=
* パラメータプレースホルダを使用してください! Use parameter placeholders!
* パラメータプレースホルダを使用してください!
* すべてのSQLキーワードは大文字にしてください。All SQL keywords are in UPPER CASE.
* すべてのSQLキーワードは大文字にしてください。
* All SQL queries and fragments should be enclosed in double quotes.
* すべてのSQLクエリおよびフラグメントは二重引用符で囲んでください。
* Complex SQL queries should be on multiple lines.
* 複雑なSQLクエリは複数行に記述してください。
* Multiline SQL queries should be right aligned on SELECT, FROM, JOIN, WHERE, GROUPY BY and HAVING.
* 複数行のSQLクエリは次の句で正しく位置合わせしてください: SELECT, FROM, JOIN, WHERE, GROUPY BY, HAVING.
* Use JOIN instead of INNER JOIN.
* INNER JOINの代わりにJOINを使用してください。
* Do not use right joins.
* RIGHT JOINは使用しないでください。
* Always use AS keyword for column aliases.
* カラムエイリアスには常にASを使用してください。
* Never use AS keyword for table aliases.
* テーブルエイリアスにASを使用しないでください。
* Use <> for comparing if values are not equals and do not use !=
* 値が等しくないことを判定するには「<>」を使用してください。「!=」は使用しないでください。


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


<code php>
<code php>
25行目: 22行目:
</code>
</code>


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


<code php>
<code php>
36行目: 33行目:
</code>
</code>


==インデント Indentation==
==インデント==


[[File:sql_indentation.png]]
[[File:sql_indentation.png]]


==サブクエリ Subqueries==
==サブクエリ==
 
サブクエリのインデントには厳密なルールはありません。読みやすさが決め手です - MDLSITE-1914をご覧ください。
There are no strict rules for subquery indentation, the deciding factor is good readability - see MDLSITE-1914.


==関連情報==
==関連情報==

2021年2月20日 (土) 15:01時点における最新版

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

完全な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をご覧ください。

関連情報