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


Inserting a string into an SQL query to change the order with PHP

我想在SQLite查询的每个ORDER BY子句之前插入一个"COLLATE NOCASE"。这就是我目前所拥有的:

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

输出为:

选择`x`,`y`FROM`test`ORDER BY `x`COLLATENOCASE ASC,`z`ASC限制0,10

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

将正则表达式更改为:

$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