Entiendo que puede especificar -> distinct () en la instrucción db_select para que solo devuelva valores distintos al mirar TODOS los campos. Pero lo que quiero es devolver valores distintos solo mirando UN campo. Aquí está mi código:
$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');
Supongamos que quiero que la columna distinta sea e.nid. Pensaría que -> distinct ('e.nid') funcionaría pero aún así devuelve valores distintos basados en todos los campos (es decir, distintos (columnas1, columna2, columna3, etc.).
db_select
para que haga lo mismoRespuestas:
Suponiendo que está tratando de llegar aproximadamente a esta consulta:
Usarías:
fuente
DISTINCT es en realidad un post-modificador global para SELECT, es decir, a diferencia de SELECT ALL (que devuelve todas las respuestas) es SELECT DISTINCT (que devuelve todas las respuestas únicas). Entonces, un solo DISTINCT actúa en TODAS las columnas que le das.
Esto hace que sea muy difícil usar DISTINCT en una sola columna, mientras se obtienen las otras columnas, sin hacer grandes volteretas extremadamente feas.
La respuesta correcta es usar un GROUP BY en las columnas que desea tener respuestas únicas:
fuente
COUNT(DISTINCT foo)
pero incluso así es un modificador de la función del agregador.Retirar
->distinct()
y reemplazar con$event_table->AddExpression('distinct e.nid', 'nid');
Al igual que:
fuente
Si usa esta consulta, entonces proporcionará una consulta distinta adecuada.
fuente