Re: Alphabetical pagination

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



SET @letter := 'B';
SELECT name FROM table WHERE SUBSTRING(name, 1) == @letter;
SELECT name FROM table WHERE name like concat(@letter, '%');

I don't know a faster way to do it

On Wed, Jul 15, 2009 at 12:57 PM, Ashley
Sheridan<ash@xxxxxxxxxxxxxxxxxxxx> wrote:
> On Wednesday 15 July 2009 16:46:53 Andrew Ballard wrote:
>> On Wed, Jul 15, 2009 at 11:30 AM, Ashley
>>
>> Sheridan<ash@xxxxxxxxxxxxxxxxxxxx> wrote:
>> > On Wednesday 15 July 2009 16:21:22 tedd wrote:
>> >> At 12:38 PM -0700 7/14/09, Miller, Terion wrote:
>> >> >I am trying to make a page that displays a-z like a b c d e etc as
>> >> > links then when you click open one it reloads itself and shows only
>> >> > the query results that go with that letter...i'm not getting it....I
>> >> > get a page that says ARRAY over and over...
>> >> >
>> >> >What I have so far:
>> >>
>> >> -snip-
>> >>
>> >> Why not have MySQL sort the data instead of using php?
>> >>
>> >> For example (from memory -- use with caution)
>> >>
>> >> SELECT name FROM restaurant ORDER BY name DESC LIMIT $offset, 1
>> >>
>> >> Then just change the offset to go up and down the list.
>> >>
>> >> Cheers,
>> >>
>> >> tedd
>> >> --
>> >> -------
>> >> http://sperling.com  http://ancientstones.com  http://earthstones.com
>> >
>> > You could do what Tedd suggested, but use MySQL to actually limit the
>> > results it returns you by using a like clause, i.e. WHERE `somefield`
>> > LIKE 'a%'.
>> >
>> > *ducks to avoid people throwing things at him. I know it's slow!*
>> >
>> > --
>> > Thanks,
>> > Ash
>> > http://www.ashleysheridan.co.uk
>>
>> Why would that be slow? Using LIKE isn't always a bad thing. In this
>> case, the LIKE condition begins with a constant rather than a
>> wildcard, so it should perform well. It can even benefit from an index
>> on `somefield` if one exists.
>>
>> I only see a couple issues with tedd's query:
>>
>> 1) As written, it only returns one row. To get it to return a list,
>> you'd have to call it repeatedly inside a for...loop where $offset
>> increments begins at some value and increments/decrements to an ending
>> value. But then he did say "from memory -- use with caution". The
>> general idea is correct.
>>
>> 2)  It implements numeric pagination, which is usually based on a
>> fixed number of rows per page. The OP wanted alphabetical pagination
>> (like an address book) with each page containing all entries that
>> begin with the selected letter.
>>
>>
>> Andrew
>
> I just had a query doing the same thing one time, and that did take it's time
> (about 2-3 seconds) but it did have a few million records to look at, so I
> can understand why it was slow!
>
> And it was on MSSQL, with no indexes set up :( I nearly cried when I saw what
> I was dealing with!
>
> --
> Thanks,
> Ash
> http://www.ashleysheridan.co.uk
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>



-- 
Martin Scotta

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux