> Member::findByLetter() uses this condition:

> "lower(left(Member.last_name, 1)) = '${letter}'"

> I avoided using LIKE because I only want to look at the first letter, anyway.

This sounds like a bad idea for large tables. Assuming you have an
index on the `last_name` field, if you use this...

WHERE `Member`.`last_name` LIKE 'r%'

... it will use the index (it's a range query) and result in speedy
lookups

Using this...

WHERE LOWER(LEFT(`Member`.`last_name`, 1)) = 'r'

...will result in a full table scan, which is horribly inefficient.

(You can use EXPLAIN SELECT to see for yourself)

Case-sensitivity isn't really an issue because you can either set the
collation for the whole table as CI, or just that index. I can't
recall a single instance where the case insensitivity of a database
collation caused an issue, in any of my real-world projects. YMMV, of
course.

hth
grigri

On Apr 1, 4:38 pm, brian <bally.z...@gmail.com> wrote:
> I have something which does that. But it displays all names for a
> given letter, rather than using a paging limit. I can't figure out a
> clean way to do both.
>
> public function index($letter = null)
> {
>         $letter = is_null($letter) ? 'a' : strtolower((string) $letter);
>
>         $this->set('members', $this->Member->findByLetter($letter));
>         $this->set('alpha_list', $this->Member->getAlphaList());
>         $this->set('letter', $letter);
>
>         /* render the element only so we don't end up with a nested mess
>          */
>         if ($this->RequestHandler->isAjax())
>         {
>                 Configure::write('debug', 0);
>                 $this->viewPath = 'elements'.DS.'members';
>                 $this->render('alpha_list');
>         }
>
> }
>
> Member::findByLetter() uses this condition:
>
> "lower(left(Member.last_name, 1)) = '${letter}'"
>
> I avoided using LIKE because I only want to look at the first letter, anyway.
>
> The rest is a bit more complicated, so I've posted it here:
>
> http://bin.cakephp.org/view/1433101916
>
> This is all based on some stuff I had with a non-Cake site. That one
> actually had a lot of the heavy lifting done in the DB using pl/python
> (Postgres).
>
> On Wed, Apr 1, 2009 at 3:52 AM, meximex <meixne...@gmail.com> wrote:
>
> > hi,
> > if i have an application with a list of 1000 items and want to jump to
> > the page of the items starting with M. how could y do that?
>
> > do i have to implement that by my self?
>
> > if you would do it by yourself, how would you do it?
>
> > create a loop for every letter and an sql that counts the items before
> > that letter?
>
> > isnt there something better in mysql?
>
> > thx for your help!
> > meximex
--~--~---------~--~----~------------~-------~--~----~
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
For more options, visit this group at 
http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to