Ответ 1
Передайте значение параметра так: 'AA,BB,CC'
. Тогда достаточно использовать функцию FIND_IN_SET -
SELECT product_id, product_price
FROM product
WHERE FIND_IN_SET(product_type, param);
Допустим, у меня есть SP, у которого есть операторы SELECT
, как показано ниже,
SELECT product_id, product_price FROM product
WHERE product_type IN ('AA','BB','CC');
Но данные идут к тому, что предложение IN
должно быть через одну переменную, содержащую строку значений. Что-то ниже
SELECT product_id, product_price FROM product
WHERE product_type IN (input_variables);
Но он не работает таким образом. Любая идея, как это сделать?
Передайте значение параметра так: 'AA,BB,CC'
. Тогда достаточно использовать функцию FIND_IN_SET -
SELECT product_id, product_price
FROM product
WHERE FIND_IN_SET(product_type, param);
создать определенную пользователем функцию, которая преобразует значение, разделенное запятыми, в таблицу, и путем объединения этих двух может получить желаемый результат.
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `spTestListValues`(_list varchar(200))
BEGIN
SET @LIST=_list; -- assume this a paramter from the stored procedure
SELECT NULL AS Id, '' AS Description --insert null value to be used for list box population
UNION
(SELECT id, Description
FROM test_table
WHERE FIND_IN_SET(id,@LIST) ORDER BY Description ASC) ;
END
call `spTestListValues`('4,5,3'); --no paramter currently for test
ID Description
NUll
1 TEST1
4 TEST2
5 TEST3
Попробуйте использовать подготовленный оператор: http://dev.mysql.com/doc/refman/5.5/en/sql-syntax-prepared-statements.html