現在PHPの文字列から貼り付けられているSQLクエリがあり、それをストアドプロシージャに変換したいと思います。
現時点ではそれは次のようなものです
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句を適切にパラメーター化できますか?