2012-10-18 135 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 .. –