Order by title, but skip "The", "A", "An", etc

5 posts by 3 authors in: Forums > CMS Builder
Last Post: December 11, 2012   (RSS)

By zip222 - December 7, 2012

How can I order a multi record by title, but if the title starts with any of the combinations listed below, the ordering show be based on the second word.

A
An
The
"A
"An
"The

Re: [zip222] Order by title, but skip "The", "A", "An", etc

Hi,

The easiest way to do this is using this orderBy statement in your getRecords function:

list($blogRecords, $blogMetaData) = getRecords(array(
'tableName' => 'blog',
'loadUploads' => true,
'allowSearch' => false,
'orderBy' => 'IF(LEFT(title,2)="A ",SUBSTRING(title FROM 3),IF(LEFT(title,3)="An ",SUBSTRING(title FROM 4),IF(LEFT(title,4)="The ",SUBSTRING(title FROM 5),title)))',
));


The only problem with this method is that it's a fairly server intensive.

Another method is to have a second field called something like title_search in the section, which contains the same text as the title field, but removing A an and the from the beginning of the text. Then setting the orderBy field to title_search in your getRecords function.

Thanks!
Greg Thomas







PHP Programmer - interactivetools.com

Re: [zip222] Order by title, but skip "The", "A", "An", etc

This works well, but I also need to account for situations where the title begins with a quotation mark (")

Re: [zip222] Order by title, but skip "The", "A", "An", etc

Thanks greg. In reality this got a good bit more complicated as I also had to account for titles starting with Quote+A, Quote+An, and Quote+The. But the pattern in the code was easy to decipher and I was able to add these as well. thanks again.