Tengo una pregunta que me está volviendo loco y tengo que admitir que no tengo tanta experiencia en CakePHP. Como se menciona en esta pregunta, Using DISTINCT in a CakePHP find function, usando DISTINCT esta manera:CakePHP 2.1 - Cómo usar DISTINCT correctamente en find()
$this->Model->find('all', array('fields'=>'DISTINCT field_name'));
no devuelve valores distintos, sino que devuelve todas las filas. De hecho, el DISTINCT aquí es completamente inútil porque, por alguna razón, CakePHP agrega TableName
. id
en la consulta SQL (¿por qué puedo eliminar la referencia de id?), Devolviendo efectivamente todas las claves principales DISTINCT (= todas las filas = inútil).
Por lo tanto, todavía deseo devolver los valores DISTINCT de una columna field_name particular. ¿No puedo hacerlo usando solo la función find ('all') o find ('list')? ¿Es realmente esa la forma correcta de hacerlo usando esta función Set :: extract() descrita en el enlace de arriba? Esa parece ser una solución demasiado indirecta de CakePHP, normalmente Cake me hace la vida más fácil. :-) ¿Cuál es la forma correcta de usar Find y DISTINCT juntos? Quizás DISTINCT no funciona para find()?
Mirando el libro de cocina, que dicen: "Un ejemplo rápido de hacer una consulta DISTINCT Puede utilizar otros operadores, como MIN(), MAX(), etc., de una manera similar:".
<?php
array(
'fields' => array('DISTINCT (User.name) AS my_column_name'),
'order' = >array('User.id DESC')
)
?>
Fuente: http://book.cakephp.org/2.0/en/models/retrieving-your-data.html
Esto indica que distinguible sería posible utilizar, pero ¿qué es lo que aquí? ¿(Nombre de usuario) corresponde al campo nombre por el que quiero DISTINCT o my_column_name my field_name?
Finalmente, ¿ha cambiado algo de esto al migrar de CakePHP 1.xa CakePHP 2.x? Es decir, ¿las respuestas de CakePHP 1.x vistas en Stackoverflow siguen siendo relevantes?
¡Gracias de antemano!
Gracias por la respuesta. Sin embargo, usando '$ regions = $ this-> Provider-> find ('all', array ('fields' => array ('DISTINCT (provider.region) AS region')));' o '$ regions = $ this-> Provider-> find ('all', array ('fields' => array ('DISTINCT (provider.region)'))); 'no recoge entradas únicas.En cambio, todas las filas que no es DISTINCT y no es lo que quería. La consulta SQL resultante: 'SELECT DISTINCT (' provider' .region'), 'Provider'. Id' FROM' carecrowd''providers' AS 'Provider' WHERE 1 = 1'. ¿Te confundí de alguna manera y mi código es incorrecto? – alieninlondon
La consulta SQL generada es incorrecta, no debe haber 'Provider.id' en la consulta. ¿Qué versión de CakePHP usas? ¿Y qué base de datos? Al menos con CakePHP 2.1.3 y MySQL se genera la consulta correcta. – dhofstet
Gracias por la respuesta. Tengo CakePHP 2.1.3 y MySQL. Entonces ese no era el problema. Sin embargo, su respuesta me llevó a pensar en otras cosas además de la sintaxis defectuosa, pero relacionada con el modelo. Resultó que el problema era que había establecido una asociación modelo para el modelo de Proveedor, sin la asociación de modelos la sintaxis anterior funciona bien. Así que Cake agregó el 'Provider.id' automáticamente a la consulta SQL, ¿se supone que es así o es un error? Pregunto porque la asociación de modelo efectivamente bloquea una consulta DISTINCT find para el modelo relevante. O tal vez me perdí algo? – alieninlondon