将字符串插入 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
我想在 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