0

私のアプリケーションのどこかに、次のクエリがあります。

$sql = SELECT * FROM table ORDER BY column1;

このクエリをクラスに渡すと、テーブルが生成されます。

$table = new HtmlTable($sql)

この $table オブジェクトにはメソッド 'groupBy' があり、$sql 文字列を変更し、ORDER BY 句に 2 番目の列を追加する必要があるため、クエリは次のようになります。

$sql = SELECT * FROM table ORDER BY added_column, column;

私はこれを試しました:

select * from (SELECT * FROM table ORDER BY column1) innerSQL ORDER BY innerSQL.column2

しかし、正しくソートされません..

実際、私が必要とするのはこれです:

$sql = SELECT * FROM table ORDER BY column2, column1;

しかし、私は知りません.HtmlTableクラス内の$ sql文字列を変更するにはどうすればよいですか..

何か案は?

4

1 に答える 1

0

正規表現を使用してそれを行うことができます。メソッドがどのように見えるかの例を次に示します。

protected function groupBy($sql) {
  return preg_replace('/ORDER BY (.*)/i', 'ORDER BY SomeField, $1', $sql);
}

「ORDER BY」を「ORDER BY、SomeField」に置き換えます。これをテストする例を次に示します。

$sql = 'SELECT * FROM table ORDER BY column1';
$sql = preg_replace('/ORDER BY (.*)/i', 'ORDER BY SomeField, $1', $sql);
echo $sql;
于 2012-10-18T13:14:21.850 に答える