我有一个多次运行的查询,因此我尝试使用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个变量是我想要避免的。
答案 0 :(得分:1)
MySQL不知道你将如何使用你的语句,或者在调用时它是否会是相同的值。因此,唯一正确的方法是在该调用期间重新计算所有参数。那是 - 它的工作方式。