Синтаксис оператора SELECT:
SELECT
[ALL | DISTINCT | DISTINCTROW ]
[HIGH_PRIORITY]
[STRAIGHT_JOIN]
[SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
[SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
select_expr [, select_expr ...]
[FROM table_references
[WHERE where_condition]
[GROUP BY {col_name | expr | position}
[ASC | DESC], ... [WITH ROLLUP]]
[HAVING where_condition]
[ORDER BY {col_name | expr | position}
[ASC | DESC], ...]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
[PROCEDURE procedure_name(argument_list)]
[INTO OUTFILE 'file_name' export_options
| INTO DUMPFILE 'file_name'
| INTO var_name [, var_name]]
[FOR UPDATE | LOCK IN SHARE MODE]]
SELECT используется для извлечения данных одного или более компонентов.Каждый select_expr указывает на колонку или группу колонок таблицы, которую вы хотите получить. Должно быть не менее одного выражения (select_expr).
Для примера, занесем в базу данных несколько аккаунтов пользователей:
// test.php // ... $account = new Account(); $account->name = 'test 1'; $account->amount = '100.00'; $account->save(); $account = new Account(); $account->name = 'test 2'; $account->amount = '200.00'; $account->save();
Выполните test.php:
$ php test.php
Теперь вы можете протестировать выборку данных со следующими ниже примерами запросов:
// test.php // ... $q = Doctrine_Query::create() ->select('a.name') ->from('Account a'); echo $q->getSqlQuery();
Посмотрим на sql, который генерируется данным запросом:
SELECT a.id AS a__id, a.name AS a__name FROM account a // test.php // ... $accounts = $q->execute(); print_r($accounts->toArray())Результат обоих примеров будет одинаков:
$ php test.php Array ( [0] => Array ( [id] => 1 [name] => test 1 [amount] => ) [1] => Array ( [id] => 2 [name] => test 2 [amount] => ) )
FROM указывает на компонент или компоненты, из которых извлекаются записи:
// test.php // ... $q = Doctrine_Query::create() ->select('u.username, p.*') ->from('User u') ->leftJoin('u.Phonenumbers p') echo $q->getSqlQuery();
Метод getSql() вернет следующий запрос:
SELECT u.id AS u__id, u.username AS u__username, p.id AS p__id,
p.user_id AS p__user_id, p.phonenumber AS p__phonenumber
FROM user u LEFT JOIN phonenumber p ON u.id = p.user_id
В аргументе WHERE, если оно присутствует, указывается условие или условия, которым должны удовлетворять записи при выборке. where_condition - это условие которое истинно для каждой строки в выборке. Если не задан аргумент WHERE, запрос выбирает все строки.
// test.php // ... $q = Doctrine_Query::create() ->select('a.name') ->from('Account a') ->where('a.amount > 2000'); echo $q->getSqlQuery();
Метод getSql() вернет следующий запрос:
SELECT a.id AS a__id, a.name AS a__name FROM account a WHERE a.amount > 2000
В предложении WHERE, вы можете использовать любую из функций или операторов, которые поддерживают DQL, за исключением функций агрегирования. HAVING может быть использована для сужения результатов со статистическими функциями:
// test.php // ... $q = Doctrine_Query::create() ->select('u.username') ->from('User u') ->leftJoin('u.Phonenumbers p') ->having('COUNT(p.id) > 3'); echo $q->getSqlQuery();
Метод getSql() вернет следующий запрос:
SELECT u.id AS u__id, u.username AS u__username FROM user u
LEFT JOIN phonenumber p ON u.id = p.user_id HAVING COUNT(p.id) > 3
Выражение ORDER BY может быть использована для сортировки результатов:
// test.php // ... $q = Doctrine_Query::create() ->select('u.username') ->from('User u') ->orderBy('u.username'); echo $q->getSqlQuery();
Метод getSql() вернет следующий запрос:
SELECT u.id AS u__id, u.username AS u__username FROM user u ORDER BY u.username
Выражения LIMIT и OFFSET могут быть использованы для эффективного ограничения количества записей до заданного row_count:
// test.php // ... $q = Doctrine_Query::create() ->select('u.username') ->from('User u') ->limit(20); echo $q->getSqlQuery();
Метод getSql() вернет следующий запрос:
SELECT u.id AS u__id, u.username AS u__username FROM user u LIMIT 20
Комментариев нет:
Отправить комментарий