1

我有一个多次运行的查询,所以我尝试使用准备好的语句。但我想知道是否有一种方法可以将相同的值/变量绑定到多个参数。

这是有问题的查询

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

你不能。您应该意识到,正式定义实际调用不同。当您定义语句时,您正在定义占位符,并且在使用它时,必须传递所有声明的参数 - 无论所有参数(或其中一些参数)的实际值是否相同。

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

于 2014-09-14T11:16:37.550 回答