在SQL查询中插入字符串以使用PHP更改顺序

在SQL查询中插入字符串以使用PHP更改顺序,php,sql,regex,sqlite,preg-replace,Php,Sql,Regex,Sqlite,Preg Replace,我想在SQLite查询的每个ORDERBY子句之前插入一个“COLLATE NOCASE”。 这就是我到目前为止所做的: $string = preg_replace('~(ORDER\s+BY\s+`?.+`?)\s+([ASC|DESC]?)~iU', '$1 COLLATE NOCASE $2', $string); 输出为: 从“测试”中按“x”排序选择“x”,“y” NOCASE ASC,`z`ASC限制0,10 匹配并替换第一个实例。第二个实例没有被替换(因为模式中的OR

我想在SQLite查询的每个ORDERBY子句之前插入一个“COLLATE NOCASE”。 这就是我到目前为止所做的:

     $string = preg_replace('~(ORDER\s+BY\s+`?.+`?)\s+([ASC|DESC]?)~iU', '$1 COLLATE NOCASE $2', $string);
输出为:

从“测试”中按“x”排序选择“x”,“y” NOCASE ASC,`z`ASC限制0,10


匹配并替换第一个实例。第二个实例没有被替换(因为模式中的ORDER BY子句)。

将正则表达式更改为:

$query = "SELECT `x`, `y` FROM `test` ORDER BY `x` ASC, `z` ASC LIMIT 0, 10";
$query = preg_replace('~(ORDER BY|,)(\s+\S+)\s+(?=ASC|DESC)~iU', ' $1$2 COLLATE NOCASE ', $query);
echo $query,"\n";
输出:

SELECT `x`, `y` FROM `test` ORDER BY `x` COLLATE NOCASE ASC, `z` COLLATE NOCASE ASC LIMIT 0, 10