2

目標

単一のVARCHAR()パラメーターを介して複数の値を渡す。

シナリオ

私のアプリケーションには、いくつかのテーブルから製品を取得する手順があります。私が必要とするのは単純です:id私がそれを渡す場合、3 つ (または何でも) の結果を受け取ります。例: 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 に答える