SQL coding style: Difference between revisions
ja link |
David Mudrak (talk | contribs) m Text replacement - "<code php>" to "<syntaxhighlight lang="php">" |
||
| Line 19: | Line 19: | ||
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. | 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. | ||
< | <syntaxhighlight lang="php"> | ||
$records = $DB->get_records_select('some_table', "id > ?", array(111)); | $records = $DB->get_records_select('some_table', "id > ?", array(111)); | ||
</code> | </code> | ||
| Line 27: | Line 27: | ||
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. | 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. | ||
< | <syntaxhighlight lang="php"> | ||
$sql = "SELECT * | $sql = "SELECT * | ||
FROM {some_table} | FROM {some_table} | ||
Revision as of 13:36, 14 July 2021
This page describes recommended coding style for complex database queries.
Full SQL queries are used in $DB->get_records_sql(), $DB->get_recordset_sql() or $DB->execute(). SQL fragments may be used in DML method with _select() suffix.
General rules
- Use parameter placeholders!
- All SQL keywords are in UPPER CASE.
- All SQL queries and fragments should be enclosed in double quotes.
- Complex SQL queries should be on multiple lines.
- Multiline SQL queries should be right aligned on SELECT, FROM, JOIN, WHERE, GROUPY BY and HAVING.
- Use JOIN instead of INNER JOIN.
- Do not use right joins.
- Always use AS keyword for column aliases.
- Never use AS keyword for table aliases.
- Use <> for comparing if values are not equals and do not use !=
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.
<syntaxhighlight lang="php"> $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.
<syntaxhighlight lang="php"> $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.
