2

目标

通过单个VARCHAR()参数传递多个值。

场景

在我的应用程序中有一个从某个表中获取产品的过程。我需要的很简单:id如果我通过了,就取三个(或其他)结果。例如: CALL getProducts('1, 2, 3');

为此,我正在使用IN子句。看看我的查询:

BEGIN
    Select product.Name
    From app_products As product
    Where product.Id In (1, 2, 3)
END

如何1, 2, 3通过参数传递它们?

我已经尝试过的

看看我的查询及其参数:

CREATE PROCEDURE `getProductsPrices`(IN `ids` VARCHAR(255))
BEGIN
    Select product.Name
    From app_products As product
    Where product.Id In (ids)
END

现在,当我调用它时:

CALL `getProductsPrices`('1, 2, 3')

回报是:

警告:截断不正确的 DOUBLE '1, 2, 3'

有人对我有什么建议吗?

重复?

我认为这个主题没有重复,因为我已经搜索过相同的主题但没有成功。

4

2 回答 2

3

可能不是真正的索引友好,但你可以使用find_in_set函数......

where find_in_set(product.id, ids)

否则,您需要将分隔字符串解析为临时表并与该表连接。

于 2013-08-01T19:38:18.460 回答
2

您需要设置动态 SQL

DELIMITER $$
DROP PROCEDURE `getProductsPrices` $$
CREATE PROCEDURE `getProductsPrices`(IN `ids` VARCHAR(255))
BEGIN
    SET @sql = 'Select product.Name From app_products';
    SET @sql = CONCAT(@sql,' As product Where product.Id In (',`ids`,')');
    PREPARE s FROM @sql;
    EXECUTE s;
    DEALLOCATE PREPARE s;
END $$
DELIMITER ;

试试看 !!!

于 2013-08-01T19:43:02.643 回答