Re: How to change order only for child elements in find('threaded').

2012-11-27 Thread Anna P
Thanks a lot!
Your suggestion solved my problem. Just like you said, I run select query 
with ascending order, then if the sorting is set to DESC, I run 
array_reverse on result set.
Cheers!:)

On Monday, November 26, 2012 8:10:50 PM UTC+1, cricket wrote:
>
> Model::_findThreaded() uses Set::nest() to create the threaded array. 
> So, perhaps the simplest approach would be to use 'ASC' by default, 
> then test for $sort _after_ you get the results back. To switch to 
> descending order for just the parent comments, run the result through 
> array_reverse(). 
>
> On Mon, Nov 26, 2012 at 5:10 AM, Anna P > 
> wrote: 
> > Hello. 
> > 
> > I got problem with setting up an order for child elements different than 
> for 
> > parent elements. 
> > I have a blog with comments. Users can switch between comments order - 
> > comments can either be sorted descending or ascending. 
> > The problem is, when the order is set to descending, also the child 
> elements 
> > are sorted descending. That way, the child comments which are answers to 
> > parent comments are also shown in a way that the newest one is on top. 
> And I 
> > would like to order the child elements by ascending way, even when 
> parents 
> > are sorted descending. 
> > 
> > I tried to use IF statement in order clause like this: 
> > 
> > if($sort=='desc') { 
> >   $order='IF parent_id IS NULL THEN created desc ELSE created asc END'; 
> > } else { 
> >   $order='created asc'; 
> > } 
> > 
> $comments=$this->Comment->find('threaded',array('conditions'=>array('post_id'=>$p['Post']['id']),
>  
>
> >   'fields'=>array('Comment.id','parent_id','comment','created'), 
> >   'order'=>$order)); 
> > 
> > but I get an error: 
> > Error: SQLSTATE[42000]: Syntax error or access violation: 1064 You have 
> an 
> > error in your SQL syntax; check the manual that corresponds to your 
> MySQL 
> > server version for the right syntax to use near 'parent_id IS NULL THEN 
> > created END desc, IF parent_id IS NOT NULL THEN id END as' at line 1 
> > 
> > I've read somewhere that the DESC and ASC cannot be used inside IF or 
> CASE 
> > statement. How else could the default ordering for whole table be 
> changes to 
> > another only for child elements? 
> > 
> > Regards & thank you in advance for help. 
> > 
> > -- 
> > Like Us on FaceBook https://www.facebook.com/CakePHP 
> > Find us on Twitter http://twitter.com/CakePHP 
> > 
> > --- 
> > You received this message because you are subscribed to the Google 
> Groups 
> > "CakePHP" group. 
> > To post to this group, send email to cake...@googlegroups.com. 
>
> > To unsubscribe from this group, send email to 
> > cake-php+u...@googlegroups.com . 
> > Visit this group at http://groups.google.com/group/cake-php?hl=en. 
> > 
> > 
>

-- 
Like Us on FaceBook https://www.facebook.com/CakePHP
Find us on Twitter http://twitter.com/CakePHP

--- 
You received this message because you are subscribed to the Google Groups 
"CakePHP" group.
To post to this group, send email to cake-php@googlegroups.com.
To unsubscribe from this group, send email to 
cake-php+unsubscr...@googlegroups.com.
Visit this group at http://groups.google.com/group/cake-php?hl=en.




Re: How to change order only for child elements in find('threaded').

2012-11-26 Thread lowpass
Model::_findThreaded() uses Set::nest() to create the threaded array.
So, perhaps the simplest approach would be to use 'ASC' by default,
then test for $sort _after_ you get the results back. To switch to
descending order for just the parent comments, run the result through
array_reverse().

On Mon, Nov 26, 2012 at 5:10 AM, Anna P  wrote:
> Hello.
>
> I got problem with setting up an order for child elements different than for
> parent elements.
> I have a blog with comments. Users can switch between comments order -
> comments can either be sorted descending or ascending.
> The problem is, when the order is set to descending, also the child elements
> are sorted descending. That way, the child comments which are answers to
> parent comments are also shown in a way that the newest one is on top. And I
> would like to order the child elements by ascending way, even when parents
> are sorted descending.
>
> I tried to use IF statement in order clause like this:
>
> if($sort=='desc') {
>   $order='IF parent_id IS NULL THEN created desc ELSE created asc END';
> } else {
>   $order='created asc';
> }
> $comments=$this->Comment->find('threaded',array('conditions'=>array('post_id'=>$p['Post']['id']),
>   'fields'=>array('Comment.id','parent_id','comment','created'),
>   'order'=>$order));
>
> but I get an error:
> Error: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an
> error in your SQL syntax; check the manual that corresponds to your MySQL
> server version for the right syntax to use near 'parent_id IS NULL THEN
> created END desc, IF parent_id IS NOT NULL THEN id END as' at line 1
>
> I've read somewhere that the DESC and ASC cannot be used inside IF or CASE
> statement. How else could the default ordering for whole table be changes to
> another only for child elements?
>
> Regards & thank you in advance for help.
>
> --
> Like Us on FaceBook https://www.facebook.com/CakePHP
> Find us on Twitter http://twitter.com/CakePHP
>
> ---
> You received this message because you are subscribed to the Google Groups
> "CakePHP" group.
> To post to this group, send email to cake-php@googlegroups.com.
> To unsubscribe from this group, send email to
> cake-php+unsubscr...@googlegroups.com.
> Visit this group at http://groups.google.com/group/cake-php?hl=en.
>
>

-- 
Like Us on FaceBook https://www.facebook.com/CakePHP
Find us on Twitter http://twitter.com/CakePHP

--- 
You received this message because you are subscribed to the Google Groups 
"CakePHP" group.
To post to this group, send email to cake-php@googlegroups.com.
To unsubscribe from this group, send email to 
cake-php+unsubscr...@googlegroups.com.
Visit this group at http://groups.google.com/group/cake-php?hl=en.




How to change order only for child elements in find('threaded').

2012-11-26 Thread Anna P
Hello.

I got problem with setting up an order for child elements different than 
for parent elements.
I have a blog with comments. Users can switch between comments order - 
comments can either be sorted descending or ascending.
The problem is, when the order is set to descending, also the child 
elements are sorted descending. That way, the child comments which are 
answers to parent comments are also shown in a way that the newest one is 
on top. And I would like to order the child elements by ascending way, even 
when parents are sorted descending.

I tried to use IF statement in order clause like this:

if($sort=='desc') {
  $order='IF parent_id IS NULL THEN created desc ELSE created asc END';
} else {
  $order='created asc';
}
$comments=$this->Comment->find('threaded',array('conditions'=>array('post_id'=>$p['Post']['id']),
  'fields'=>array('Comment.id','parent_id','comment','created'),
  'order'=>$order));

but I get an error:
Error: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an 
error in your SQL syntax; check the manual that corresponds to your MySQL 
server version for the right syntax to use near 'parent_id IS NULL THEN 
created END desc, IF parent_id IS NOT NULL THEN id END as' at line 1

I've read somewhere that the DESC and ASC cannot be used inside IF or CASE 
statement. How else could the default ordering for whole table be changes 
to another only for child elements?

Regards & thank you in advance for help.

-- 
Like Us on FaceBook https://www.facebook.com/CakePHP
Find us on Twitter http://twitter.com/CakePHP

--- 
You received this message because you are subscribed to the Google Groups 
"CakePHP" group.
To post to this group, send email to cake-php@googlegroups.com.
To unsubscribe from this group, send email to 
cake-php+unsubscr...@googlegroups.com.
Visit this group at http://groups.google.com/group/cake-php?hl=en.