1
我有一個SQL查詢,它當前從PHP中的字符串粘貼到一起,我想將它變成一個存儲過程。存儲過程中的SQL變量ORDER BY子句
目前這件事情就像
function db_get ($mode)
{
$order_by = '';
if ('name'===$mode)
$order_by = '`name` DESC';
if ('date'===$mode)
$order_by = '`date` DESC';
// ...
return db_all_rows ("SELECT foo FROM bar WHERE baz ORDER BY $order_by");
}
我不認爲一個列的名稱可以是一個參數傳遞給一個存儲過程,如此看來,要麼我不得不復制 - 粘貼整個查詢每種類型的訂單 - 它需要,或做一些類似的數字破解這樣的
CREATE PROCEDURE GetStuff (IN use_name INT, IN use_date INT, ...)
SELECT foo, (name*use_name + date*use_date + ...) AS order_by_value
FROM bar WHERE baz ORDER BY order_by_value
我不知道哪個更糟。
我更喜歡數字破解的重複,除非它會搞砸優化。
它會搞砸優化器?
或者更好的是,我可以正確地參數化order-by子句嗎?
*這是*我的目標;我會+1,但我沒票了 – LittleBobbyTables 2012-07-23 19:26:15
@LittleBobbyTables謝謝!就+1而言,它不會計數,因爲我已經在一天中完成了。順便說一句,你有一個非常酷的暱稱和匹配的gravatar – dasblinkenlight 2012-07-23 19:29:49