SELECT DISTINCT Doctrine

156 views
Skip to first unread message

Sergio Barbosa

unread,
Jul 25, 2011, 4:03:01 PM7/25/11
to symfo...@googlegroups.com
Buenos dias,

Tengo una pregunta con respecto a la función  SELECT DISTINCT de Doctrine, cuando aplico la consulta el  DISTINCT se aplica solo al ID llave de la tabla y no al elemento del select:

$q = Doctrine_Query::create()
                ->select('DISTINCT c.cancha_id')
                ->from('PreciosCancha c')
                ->where("c.lunes >= '" . $desde . "'")
                ->andWhere("c.lunes <= '" . $hasta . "'")
                ->orWhere("c.martes >= '" . $desde . "'")
                ->andWhere("c.martes <= '" . $hasta . "'")
                ->orWhere("c.miercoles >= '" . $desde . "'")
                ->andWhere("c.miercoles <= '" . $hasta . "'")
                ->orWhere("c.jueves >= '" . $desde . "'")
                ->andWhere("c.jueves <= '" . $hasta . "'")
                ->orWhere("c.viernes >= '" . $desde . "'")
                ->andWhere("c.viernes <= '" . $hasta . "'")
                ->orWhere("c.sabado >= '" . $desde . "'")
                ->andWhere("c.sabado <= '" . $hasta . "'")
                ->orWhere("c.domingo >= '" . $desde . "'")
                ->andWhere("c.domingo <= '" . $hasta . "'");
        return $q->execute();


En ese query pretendo hacer que no me repita los resultados de c.cancha_id, pero doctrine aplica el DISTINCT a ID de tabla precios cancha, lo que me arroja los resultados de id_cancha repetidos.


Buscando un poco en Internet me encontré con esta función de doctrine

$q = new Doctrine_RawSql();
        $q->select('{c.cancha_id}')
                ->from('precios_cancha c')
                ->addComponent('c', 'PreciosCancha')
                ->distinct(true)
                ->orWhere("c.lunes >= '" . $desde . "'")
                ->orWhere("c.lunes <= '" . $hasta . "'")
                ->orWhere("c.martes >= '" . $desde . "'")
                ->orWhere("c.martes <= '" . $hasta . "'")
                ->orWhere("c.miercoles >= '" . $desde . "'")
                ->orWhere("c.miercoles <= '" . $hasta . "'")
                ->orWhere("c.jueves >= '" . $desde . "'")
                ->orWhere("c.jueves <= '" . $hasta . "'")
                ->orWhere("c.viernes >= '" . $desde . "'")
                ->orWhere("c.viernes <= '" . $hasta . "'")
                ->orWhere("c.sabado >= '" . $desde . "'")
                ->orWhere("c.sabado <= '" . $hasta . "'")
                ->orWhere("c.domingo >= '" . $desde . "'")
                ->orWhere("c.domingo <= '" . $hasta . "'")
                ->orderBy('c.cancha_id  ASC');
        return $q->execute();

Que funciona muy bien para realizar el SELECT DISTINCT pero por una extraña razón no respeta ninguno de los ORWHERE de la consulta, espero que alguien me pueda colaborar.

Jonnatan Oyarzún

unread,
Jul 25, 2011, 4:24:07 PM7/25/11
to symfo...@googlegroups.com
Buenas, trata de usar hidratación por ejemplo

$q = Doctrine_Query::create()
                ->select('DISTINCT c.cancha_id')
                ->from('PreciosCancha c')
                ->where("c.lunes >= '" . $desde . "'")
                ->andWhere("c.lunes <= '" . $hasta . "'")
                ->orWhere("c.martes >= '" . $desde . "'")
                ->andWhere("c.martes <= '" . $hasta . "'")
                ->orWhere("c.miercoles >= '" . $desde . "'")
                ->andWhere("c.miercoles <= '" . $hasta . "'")
                ->orWhere("c.jueves >= '" . $desde . "'")
                ->andWhere("c.jueves <= '" . $hasta . "'")
                ->orWhere("c.viernes >= '" . $desde . "'")
                ->andWhere("c.viernes <= '" . $hasta . "'")
                ->orWhere("c.sabado >= '" . $desde . "'")
                ->andWhere("c.sabado <= '" . $hasta . "'")
                ->orWhere("c.domingo >= '" . $desde . "'")
                ->andWhere("c.domingo <= '" . $hasta . "'")
                ->setHydrationMode(Doctrine::HYDRATE_ARRAY);
        return $q->execute();

Ahí te resultara.
Sl2

2011/7/25 Sergio Barbosa <sbarb...@gmail.com>

$q = Doctrine_Query::create()
                ->select('DISTINCT c.cancha_id')
                ->from('PreciosCancha c')
                ->where("c.lunes >= '" . $desde . "'")
                ->andWhere("c.lunes <= '" . $hasta . "'")
                ->orWhere("c.martes >= '" . $desde . "'")
                ->andWhere("c.martes <= '" . $hasta . "'")
                ->orWhere("c.miercoles >= '" . $desde . "'")
                ->andWhere("c.miercoles <= '" . $hasta . "'")
                ->orWhere("c.jueves >= '" . $desde . "'")
                ->andWhere("c.jueves <= '" . $hasta . "'")
                ->orWhere("c.viernes >= '" . $desde . "'")
                ->andWhere("c.viernes <= '" . $hasta . "'")
                ->orWhere("c.sabado >= '" . $desde . "'")
                ->andWhere("c.sabado <= '" . $hasta . "'")
                ->orWhere("c.domingo >= '" . $desde . "'")
                ->andWhere("c.domingo <= '" . $hasta . "'");
        return $q->execute();



--
Jonnatan Oyarzún
Estudiante Ingeniería Civil Informática
Universidad de Santiago de Chile

Sergio Barbosa

unread,
Jul 25, 2011, 6:37:25 PM7/25/11
to symfo...@googlegroups.com
Gracias por responder, la cosa es que me sigue aplicando el DISTINCT al ID de la tabla, o quizá sea yo quien este cometiendo un error a  recorrer el resultado del query, yo lo recorro asi:

foreach($q as $cancha){

$cancha->getCanchaId();

}

de antemano muchas gracias por responder.

Derlis González

unread,
Aug 6, 2012, 11:29:00 AM8/6/12
to symfo...@googlegroups.com
en la tabla 

public function getDistinctValue($id) {
        $q = Doctrine_Query::create()
        ->select("DISTINCT(folio) as folio, (usu_id) as usu_id")
        ->from("Folio")
        ->where("inv_id = ?", $id)
        ->andWhere("folio IS NOT NULL")
        ->orderBy('folio');  
        return $q->execute();
        
}

para llamar 
$ds = Doctrine::getTable('Folio')->getDistinctValue($inventario->getId());

para recorrer
 foreach($ds as $d){
    echo$d->getFolio();
    echo $d->getUsuId();
Reply all
Reply to author
Forward
0 new messages