将字符串插入 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', ' COLLATE NOCASE ', $string);

输出为:

SELECT `x`, `y` FROM `test` ORDER BY `x` COLLATE NOCASE ASC, `z` ASC LIMIT 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', '  COLLATE NOCASE ', $query);
echo $query,"\n";

输出:

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