Я понимаю, что вы можете указать -> Different () в операторе db_select, чтобы он возвращал только разные значения при просмотре ВСЕХ полей. Но то, что я хочу, это чтобы вернуть отдельные значения, только глядя на одно поле. Вот мой код:
$event_table = db_select('my_table', 'e')
->distinct()
->orderBy('e.time', 'ASC');//ORDER BY
$event_table->join('node', 'n', 'e.nid = n.nid'); //JOIN node with events
$event_table->groupBy('e.time');//GROUP BY time
$event_table->fields('e')//SELECT the fields from events
->fields('n',array('type','status','title'))//SELECT the fields from node
->orderBy('e.time', 'ASC');//ORDER BY
$result_event_table = $event_table->execute();
$result_event_table = $result_event_table->fetchAllAssoc('time');
Предположим, я хочу, чтобы отдельный столбец был e.nid. Вы могли бы подумать, что -> Different ('e.nid') будет работать, но он по-прежнему возвращает разные значения, основанные на всех полях (то есть, отличные (columns1, column2, column3 и т.д.).
db_select
сделать то же самоеОтветы:
Предполагая, что вы пытаетесь получить примерно до этого запроса:
Вы бы использовали:
источник
DISTINCT на самом деле является глобальным пост-модификатором для SELECT, то есть, в отличие от SELECT ALL (возвращает все ответы), это SELECT DISTINCT (возвращает все уникальные ответы). Таким образом, один DISTINCT действует на ВСЕ столбцы, которые вы ему даете.
Это делает очень трудным использование DISTINCT для одного столбца, в то время как другие столбцы получаются без каких-либо серьезных уродливых сальто.
Правильный ответ - использовать GROUP BY для столбцов, для которых вы хотите получить уникальные ответы:
источник
COUNT(DISTINCT foo)
но даже тогда это модификатор функции-агрегатора.Удалить
->distinct()
и заменить его$event_table->AddExpression('distinct e.nid', 'nid');
Вот так:
источник
Если вы используете этот запрос, то предоставьте правильный отдельный запрос.
источник