2012-10-29 37 views
26

IN句に変数を渡すにはどうすればいいですか?

SELECT product_id, product_price FROM product 
WHERE product_type IN ('AA','BB','CC'); 

、私は次のようにSELECT文を持っているSPを持っていると言うことができます。しかし、データがIN句は、値の文字列を含む単一の変数を介してでなければならないことになります。何かがリンク先

しかし、そのように動作しません。どのようにこれを行うにはどのようなアイデア?

+3

'input_variables'はどこから来ますか? 'php? ' –

+0

実際には直接のMYSQLはcronジョブから実行するので、SPの入力パラメータの1つです。ユーザーが入力するデータは、必要なデータによって異なります。 – Thanu

+1

だから、カンマ区切りの値が1つの変数にあることを意味しますか? –

答えて

38

このようなパスパラメータ値 - 'AA,BB,CC'を。その後、FIND_IN_SET機能を使用するのに十分である - 変数を使用して文字列を渡す

SELECT product_id, product_price 
FROM product 
WHERE FIND_IN_SET(product_type, param); 
+0

ありがとうございます! – danielad

+0

@danielad Welcome) – Devart

+3

これにより、索引なしですべての表に対して照会が実行されます。これは有効な答えだと思っても堅牢ではありません –

3

カンマ区切りの値をtableに変換するユーザー定義関数を作成し、この2つを結合して目的の結果を得ることができます。

for more

2

が問題このソリューションを想定し

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 
関連する問題