[symfony-users] Re: Problem in figuring out a Doctrine Query for Symfony?

2009-02-15 Thread Tomek

Hi SeeVik,

I've done only small change (MAX(p2.posted) instead of MAX(posted))
and your DQL works fine for me:
$q = Doctrine_Query::create()
  -> from( 'Topic t' )
  -> innerJoin( 't.Posts p' )
  -> where( 'p.posted = (SELECT MAX(p2.posted) from post p2 where
p2.topic_id = p.topic_id)' );

 var_dump($q->getSql());
string(231) "SELECT t.id AS t__id, p.id AS p__id, p.topic_id AS
p__topic_id, p.posted AS p__posted FROM topic t INNER JOIN post p ON
t.id =  p.topic_id WHERE p.posted = (SELECT MAX(p2.posted) AS
p2__0 FROM post p2 WHERE p2.topic_id = p.topic_id)"



I have symfony 1.2.5-DEV from SVN, rev 15495.

cheers,
Tomek


On Feb 14, 11:30 pm, SeeVik  wrote:
> Hello Tomek. Yes I will try that query. In the mean time I have
> figured out something similar.
>
> The SQL query...
> SELECT *
>    FROM topic t INNER JOIN post p
>    ON ( t.id = p.topic_id )
>    WHERE p.posted = ( SELECT MAX(posted) FROM post
>       WHERE topic_id = p.topic_id );
>
> I have a problem figuring out the DQL for it though. I tried this
> one...
>
> $q = Doctrine_Query::create()
>   -> from( 'Topic t' )
>   -> innerJoin( 't.Posts p' )
>   -> where( 'p.posted = (SELECT MAX(posted) from post p2 where
> p2.topic_id = p.topic_id)' );
>
> But what this does is. it genrates a sql query looking like
> this
>
> SELECT *
>    FROM topic t INNER JOIN post p
>    ON ( t.id = p.topic_id )
>    WHERE p.posted = ( SELECT MAX(posted FROM post
>       WHERE topic_id = p.topic_id ));
>
> Notice that paranthesis after MAX has been placed at the end. That
> gives an SQL syntax error.
> Is this a problem in Doctrine?
>
> On Feb 15, 12:34 am, Tomek  wrote:
>
> > Hi Vikram,
>
> > One way to do it would be with the subquery.
>
> > I'm assuming your schema is:
> > Topic:
> >   columns:
>
> > Post:
> >   columns:
> >     topic_id: integer
> >     posted: timestamp
> >   relations:
> >     Topic:
> >       foreignAlias: Posts
>
> > In SQL the query you are looking for looks like that:
> >      SELECT * FROM topic t INNER JOIN post p ON (t.id=p.topic_id)
> > WHERE p.id=(SELECT id FROM post WHERE topic_id=p.topic_id ORDER BY
> > posted DESC LIMIT 1 );
>
> > In DQL:
> >     $q = Doctrine_Query::create()->from('Topic t')->innerJoin('t.Posts
> > p')
> >     ->where('p.id = (SELECT p2.id from post p2 where
> > p2.topic_id=p.topic_id order by p2.posted desc limit 1)');
>
> > I hope that helps,
> > Tomek
>
> > On Feb 13, 11:06 am, SeeVik  wrote:
>
> > > Hello all
>
> > > I am using Symfony with Doctrine plugin.
>
> > > I am making a simple bulletin board in my application. I want to find
> > > out the last post in every topic and display the time in front of
> > > topic.
>
> > > In Symfony, in the controller for the screen, I do this...
>
> > > $list_topics = Doctrine::getTable( "Topics" )->getLastPost();
>
> > > In the model layer, in PostsTable.class.php, I have this
>
> > > public function getLastPost()
> > > {
> > > $q = $this->createQuery( 'a' )
> > >   -> innerJoin( 'a.Topics t' )
> > >   -> groupBy( 'a.topic_id' )
> > >   -> having( 'a.posts_id = ?', ' Query to find out the posts having
> > > maximum time for a particular topic ' );
> > > return $q->execute();
>
> > > }
>
> > > Can somebody help me out with this?
>
> > > Thanks and Regards
> > > Vikram
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"symfony users" group.
To post to this group, send email to symfony-users@googlegroups.com
To unsubscribe from this group, send email to 
symfony-users+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/symfony-users?hl=en
-~--~~~~--~~--~--~---



[symfony-users] Re: Problem in figuring out a Doctrine Query for Symfony?

2009-02-14 Thread Tomek

Hi Vikram,

One way to do it would be with the subquery.

I'm assuming your schema is:
Topic:
  columns:

Post:
  columns:
topic_id: integer
posted: timestamp
  relations:
Topic:
  foreignAlias: Posts

In SQL the query you are looking for looks like that:
 SELECT * FROM topic t INNER JOIN post p ON (t.id=p.topic_id)
WHERE p.id=(SELECT id FROM post WHERE topic_id=p.topic_id ORDER BY
posted DESC LIMIT 1 );

In DQL:
$q = Doctrine_Query::create()->from('Topic t')->innerJoin('t.Posts
p')
->where('p.id = (SELECT p2.id from post p2 where
p2.topic_id=p.topic_id order by p2.posted desc limit 1)');

I hope that helps,
Tomek

On Feb 13, 11:06 am, SeeVik  wrote:
> Hello all
>
> I am using Symfony with Doctrine plugin.
>
> I am making a simple bulletin board in my application. I want to find
> out the last post in every topic and display the time in front of
> topic.
>
> In Symfony, in the controller for the screen, I do this...
>
> $list_topics = Doctrine::getTable( "Topics" )->getLastPost();
>
> In the model layer, in PostsTable.class.php, I have this
>
> public function getLastPost()
> {
> $q = $this->createQuery( 'a' )
>   -> innerJoin( 'a.Topics t' )
>   -> groupBy( 'a.topic_id' )
>   -> having( 'a.posts_id = ?', ' Query to find out the posts having
> maximum time for a particular topic ' );
> return $q->execute();
>
> }
>
> Can somebody help me out with this?
>
> Thanks and Regards
> Vikram

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"symfony users" group.
To post to this group, send email to symfony-users@googlegroups.com
To unsubscribe from this group, send email to 
symfony-users+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/symfony-users?hl=en
-~--~~~~--~~--~--~---