mysql - MySQL Prepared语句使用一个变量多次绑定相同的值

时间:2014-09-14 11:03:08

标签: mysql mysql++

我有一个多次运行的查询,因此我尝试使用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个变量是我想要避免的。

1 个答案:

答案 0 :(得分:1)

不,你不能。您应该意识到,正式定义执行调用不同。当您定义语句时,您将定义占位符,并且在使用它时,所有声明的参数必须才能通过 - 无论所有这些参数的真实值是否相同(或者对于其中一些都是如此) )。

MySQL不知道你将如何使用你的语句,或者在调用时它是否会是相同的值。因此,唯一正确的方法是在该调用期间重新计算所有参数。那是 - 它的工作方式。