2012-10-18 137 views
0

某处在我的申请,我有一个查询:修改SQL查询

$sql = SELECT * FROM table ORDER BY column1; 

我通过此查询到我的类,它生成的表:

$table = new HtmlTable($sql) 

这$表对象有一个方法“GROUPBY”,这应该改变$ SQL字符串,它应该在ORDER BY子句添加第二列,因此查询应该是这样的:

$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字符串..

任何想法?

+0

我已经尝试过这种解决方案,它不工作.. –

回答

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; 
+0

这会工作(假设@Juraj访问HtmlTable',这是不明确的'胆量问题),但我认为最初的要求是首先添加新字段,所以替换应该是ORDER BY SomeField,$ 1'' – Palpatim

+0

他写道:“_This $表格对象有一个方法'groupBy',它应该改变$ sql string_“,因此我假设他可以修改groupBy方法。你对场地秩序是正确的,我错误地把它放在后面。我正在更正答案,谢谢。 – Diego

+0

我可以修改它,我会尝试这个解决方案,thx .. –