You are here: Re: need to do a string replace of "asc" to "desc" or "desc" to "asc" first occurrence only « PHP Programming Language « IT news, forums, messages
Re: need to do a string replace of "asc" to "desc" or "desc" to "asc" first occurrence only

Posted by comp.lang.php on 02/04/06 03:37

Ok using your function:

[PHP]
if (!function_exists('change_first_order_flag')) {
function change_first_order_flag($orderBy){
$tmp = explode('__SPLIT__HERE__', preg_replace('`(asc|desc)`i',
'__SPLIT__HERE__$1', $orderBy));
if (count($tmp) > 1) {
// there are at least 2 elements
// therefore, it was in there at least once
if (substr(strtolower($tmp[1]), 0, 3) == 'des') { // it was in
descending order
$tmp[1] = 'as' . substr($tmp[1], 3);
} else { // it was in ascending order
$tmp[1] = 'des' . substr($tmp[1], 3);
}
}
return join($tmp);
}
}
[/PHP]

Produced the following MySQL query syntax error:

[quote]
Fatal error: 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 'des, upper(s.student_firs' at line 1 using query:
[/quote]

I'll keep looking at it but apparently it chops the ORDER BY clause
incorrectly if the original ORDER BY clause contains ".. asc"

Phil
Justin Koivisto wrote:
> comp.lang.php wrote:
> > [PHP]
> > $orderBy = 's.app_date desc, s.last_name asc, s.first_name asc, s.mi
> > asc';
> > if ($_REQUEST['willDesc']) {
> > $ascArray = array('asc' => 'desc', 'desc' => 'asc'); // ARRAY OF
> > ALL ORDERING POSSIBILITIES
> > $junk = preg_match('/([\s\t]+)a|[de]sc(,?.*$)/i', $orderBy,
> > $matchArray);
> > $orderBy = substr($orderBy, 0, strpos($orderBy, $matchArray[1])) .
> > ' ' . $ascArray[$matchArray[1]] .
> > substr($orderBy, strpos($orderBy, $matchArray[1]) +
> > strlen($matchArray[1]), strlen($orderBy));
> > }
> > [/PHP]
> >
> > Basic premise:
> >
> > I have a SQL "ORDER BY" clause that will be configured like $orderBy 's
> > value. However, the very first occurrence of "desc" might instead be
> > "asc". If the very first occurrence is "asc", it must become "desc";
> > likewise, if the very first occurrence is "desc", it must become "asc".
> >
> > I tried Regular Expressions but the pattern failed every single time to
> > match and replace, so I gave up and tried a string function/RegExp code
> > combination, also to no avail.
> >
> > I am not sure how to make this work so I need help figuring out how to
> > do this.
> >
> > Thanx
> > Phil
> >
>
>
> function change_first_order_flag($orderBy){
> $tmp = explode(
> '__SPLIT__HERE__',
> preg_replace(
> '`(asc|desc)`i',
> '__SPLIT__HERE__$1',
> $orderBy
> )
> );
>
> if(count($tmp)>1){
> // there are at least 2 elements
> // therefore, it was in there at least once
> if(substr($tmp[1],0,3)=='des'){
> // it was in descending order
> $tmp[1]='as'.substr($tmp[1],3);
> }else{
> // it was in ascending order
> $tmp[1]='des'.substr($tmp[1],3);
> }
> }
>
> return join($tmp);
> }
>
>
> --
> Justin Koivisto, ZCE - justin@koivi.com
> http://koivi.com

 

Navigation:

[Reply to this message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация