Query complicada

7 views
Skip to first unread message

cgb

unread,
Mar 10, 2010, 6:36:19 PM3/10/10
to symfony-es
Hola a todos, tengo la siguiente estructura:

AwebProspecto:
columns:
apellido: { type: string(255), notnull: true }
nombre: { type: string(255) }
direccion: { type: string(255) }
telefono: { type: string(255), notnull: true }

AwebTarea:
columns:
prospecto_id: { type: integer, notnull: true }
descripcion : { type: string(255), notnull: true }
relations:
AwebProspecto: { local: prospecto_id, foreign: id, foreignAlias:
AwebProspectos, foreignType: many }

y lo que quiero hacer es saber "todos los prospectos que tienen
tareas" es decir que con el siguiente sql deberia funcionar

select * from awebprospecto p inner join awebtarea t on
(t.prospecto_id = p.id)

pero no he podido hacer nada al respecto... no puedo hacer una
consulta que haga esto... alguna idea ?

Ayuda, please.

Rigoberto Reyes

unread,
Mar 10, 2010, 6:47:49 PM3/10/10
to symfo...@googlegroups.com
usa los alias definidos en tu relacion "AwebProspectos"

2010/3/10 cgb <cgbra...@gmail.com>

--
Has recibido este mensaje porque estás suscrito al grupo "symfony-es" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a symfo...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a symfony-es+...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/symfony-es?hl=es.


Claudio Brandolin

unread,
Mar 10, 2010, 6:52:20 PM3/10/10
to symfo...@googlegroups.com
Estoy haciendo esto.
$query = Doctrine_Query::create()
                ->from('AwebTarea t, t.AwebProspecto p')
                ->where('t.estado=1');
        return $query->execute();

pero no obtengo lo que necesito, ya que esta consulta me da todas las tareas que tiene prospectos y necesito lo contrario, (todos los prospectos que tienen tareas) el problema es que cuando invierto el orden de las tablas me dice que la relacion no existe... ¿¿¿¿????
--
Claudio Brandolin

KNO

unread,
Mar 11, 2010, 1:04:04 AM3/11/10
to symfo...@googlegroups.com
¿Y esto?

$query = Doctrine_Query::create()
->from('AwebTarea t, t.AwebProspecto p')

->where('t.prospecto=p.id and t.estado=1');
return $query->execute();

El día 11 de marzo de 2010 00:52, Claudio Brandolin
<cgbra...@gmail.com> escribió:

Jose Antonio Pio Gil

unread,
Mar 11, 2010, 4:32:12 AM3/11/10
to symfo...@googlegroups.com
En temas de performance para Doctrine me he encontrado con casos muy curiosos, y el tuyo puede ser uno de ellos. Veo dos soluciones, el join de las tablas o el buscar las tareas agrupadas por prospectos, la pregunta que tengo me la tienes que resolver tu, cual es más rápido?


Join de tablas:

Doctrine::getTable('AwebTarea')->createQuery('t')->select("p.*")->addFrom("t.AwebProspecto p")->where('prospecto', 1)->andWhere('estado',1)->groupBy("t.prospecto_id")->execute();
Esto debería funcionar, pero hace un join de 2 tablas que puede resultar en una tabla brutalmente grande. No he probado esto, pero teóricamente debería funcionar.

Tareas Agrupadas:

$tareas = Doctrine::getTable('AwebTarea')->createQuery()->select("prospecto_id")->groupBy('prospecto_id')->execute( array(), Doctrine::HYDRATE_NONE(Sy 1.2) ó Doctrine_Core::HYDRATE_NONE(Sy 1.4) );
// habría que normalizar la respuesta porque vedría un arreglo del tipo:
//array (  0 => array ( 0 => ##), 1 => array ( 0 => ##), 2 => array ( 0 => ##) , ......... )
$ids = array_map( create_function ('$result', 'return $result[0];'), $tareas ) ; // Así lo hago yo
$prospectos = Doctrine::getTable('AwebProspecto')->createQuery()->whereIn( 'id' , $dis )->execute();

Tiene más líneas de código pero puede ser más rapido que la primera consulta. Nos cuentas como te fué.

JAP

Rigoberto Reyes

unread,
Mar 11, 2010, 11:00:49 AM3/11/10
to symfo...@googlegroups.com
Si ejecutas:

symfony dql "From AwebTarea.AwebProspectos a"  y/p luego "From AwebTarea.AwebProspectos a WHERE a.id = prospecto_id" ?



2010/3/11 Jose Antonio Pio Gil <jose...@latizana.com>
Reply all
Reply to author
Forward
0 new messages