mysql - MySQL, подготовленный stamement, связывает одно и то же значение несколько раз, используя одну переменную
У меня есть запрос, который выполняется несколько раз, поэтому я попытался использовать подготовленные операторы. Но я хочу знать, есть ли способ, которым я могу связать одно и то же значение / переменную с несколькими параметрами.
Вот вопрос в вопросе
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 ответ
Нет, ты не можешь. Вы должны понимать, что формальное определение не совпадает с актуальным вызовом. Когда вы определяете свое утверждение, вы определяете заполнители и при его использовании все заявленные параметры должны быть переданы - независимо от того, является ли реальное значение одинаковым для всех из них (или для некоторых из них).
MySQL не знает, как вы будете использовать свое утверждение, будет ли оно одинаковым при вызове или нет. Поэтому единственный правильный способ - пересчитать все ваши параметры во время этого вызова. То есть - как это должно работать.