function db_distinct_field in Drupal 5
Same name in this branch
- 5 includes/database.mysqli.inc \db_distinct_field()
- 5 includes/database.mysql.inc \db_distinct_field()
- 5 includes/database.pgsql.inc \db_distinct_field()
Same name and namespace in other branches
- 4 includes/database.mysqli.inc \db_distinct_field()
- 4 includes/database.mysql.inc \db_distinct_field()
- 4 includes/database.pgsql.inc \db_distinct_field()
- 6 includes/database.inc \db_distinct_field()
Wraps the given table.field entry with a DISTINCT(). The wrapper is added to the SELECT list entry of the given query and the resulting query is returned. This function only applies the wrapper if a DISTINCT doesn't already exist in the query.
Parameters
$table Table containing the field to set as DISTINCT:
$field Field to set as DISTINCT:
$query Query to apply the wrapper to:
Return value
SQL query with the DISTINCT wrapper surrounding the given table.field.
Related topics
1 call to db_distinct_field()
- db_rewrite_sql in includes/
database.inc - Rewrites node, taxonomy and comment queries. Use it for listing queries. Do not use FROM table1, table2 syntax, use JOIN instead.
File
- includes/
database.pgsql.inc, line 420 - Database interface code for PostgreSQL database servers.
Code
function db_distinct_field($table, $field, $query) {
if (!preg_match('/FROM\\s+\\S+\\s+AS/si', $query) && !preg_match('/DISTINCT\\s+ON\\s*\\(\\s*(' . $table . '\\s*\\.\\s*)?' . $field . '\\s*\\)/si', $query) && !preg_match('/DISTINCT[ (]' . $field . '/si', $query) && preg_match('/(.*FROM\\s+)(.*?\\s)(\\s*(WHERE|GROUP|HAVING|ORDER|LIMIT|FOR).*)/Asi', $query, $m)) {
$query = $m[1];
$query .= preg_replace('/([\\{\\w+\\}]+)\\s+(' . $table . ')\\s/Usi', '(SELECT DISTINCT ON (' . $field . ') * FROM \\1) \\2 ', $m[2]);
$query .= $m[3];
}
return $query;
}