【问题标题】:Inserting a string into an SQL query to change the order with PHP将字符串插入 SQL 查询以使用 PHP 更改顺序
【发布时间】:2016-02-10 04:28:34
【问题描述】:

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

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

输出是:

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

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

【问题讨论】:

    标签: php sql regex sqlite preg-replace


    【解决方案1】:

    将您的正则表达式更改为:

    $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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多