1

複数回実行されているクエリがあるため、Prepared ステートメントを使用しようとしました。しかし、同じ値/変数を複数のパラメーターにバインドできる方法があるかどうかを知りたいです。

これが問題のクエリです

PREPARE stmt_pn FROM ' SELECT  `date`, `product_id`, `price` FROM `prd`.`pn_ceramic` WHERE `date` IN ( DATE_ADD("2014-08-05", INTERVAL ? DAY) , DATE_ADD("2014-08-16", INTERVAL ? DAY) , DATE_ADD("2014-08-23", INTERVAL ? DAY)  ) ';

SET @dn = '1';

EXECUTE stmt_pn USING @dn;

これは私に与えます

ERROR 1210 (HY000): Incorrect arguments to EXECUTE

サンプルデータセットはこちら

+---------------------+------------+-------+
| date                | product_id | price |
+---------------------+------------+-------+
| 2014-08-05 00:00:00 |  1.27      | 2.10  |
| 2014-08-06 00:00:00 |  1.47      | 3.00  |
| 2014-08-07 00:00:00 |  1.57      | 2.39  |
| 2014-08-16 00:00:00 |  1.87      | 4.17  |
| 2014-08-17 00:00:00 |  1.37      | 6.06  |
| 2014-08-18 00:00:00 |  1.37      | 2.20  |
| 2014-08-23 00:00:00 |  1.67      | 4.85  |
| 2014-08-24 00:00:00 |  1.47      | 5.34  |
+---------------------+------------+-------+

このデータセットから、クエリは返す必要があります

+---------------------+------------+-------+
| date                | product_id | price |
+---------------------+------------+-------+
| 2014-08-06 00:00:00 |  1.47      | 3.00  |
| 2014-08-17 00:00:00 |  1.37      | 6.06  |
| 2014-08-24 00:00:00 |  1.47      | 5.34  |
+---------------------+------------+-------+

同じ値を使用して複数のパラメーターをバインドしようとしていますが、これを達成するための最も速くてクリーンな方法は何だろうか. 私の場合、 Where in 句の日付の数は 100 を超える可能性があり、すべての場合で間隔は同じになるためです。したがって、すべて同じ値を持つ 100 個のパラメーターごとに 100 個の変数を作成したくありません。また、私の場合はパフォーマンスが重要であり、100 個の変数を作成するために別のループを追加することは避けたいものです。

4

1 に答える 1

1

いいえ、あなたがすることはできません。正式な定義は実際の callと同じではないことに注意してください。ステートメントを定義しているときは、プレースホルダーを定義しており、それを使用している間、要求されたすべてのパラメーターはパスである必要があります-実際の値がすべて (またはそれらの一部) で同じであるかどうかに関係なく)。

MySQL は、呼び出し時に同じ値になるかどうかに関係なく、ステートメントをどのように使用するかわかりません。したがって、唯一の正しい方法は、その呼び出し中にすべてのパラメーターを再カウントすることです。つまり、それがどのように機能するかです。

于 2014-09-14T11:16:37.550 に答える