2009-02-27 29 views
7

私は、パラメータリストとしてphpからmysqlストアドプロシージャに値の配列を渡そうとしており、ストアドプロシージャ内で配列を使用する方法を説明しています。プロシージャ内の問合せには3つのIN文がありますので、IN(@listOfids)を実行したいと思います。@ listOfidsは1,2,3,4(PHPのimploded配列)です。配列をストアドプロシージャに渡す

+0

あなたが達成しようとしていることを理解しやすくするために、回答を編集してコードの一部を投稿できますか? – lpfavreau

答えて

5

PHPを介して渡されるだから擬似コードは

CREATE PROCEDURE `related_stories`(IN param1 VARCHAR(255), IN param2 VARCHAR(255), IN param3 VARCHAR(255), IN publishDate INT(11), IN tlimit INT(11)) 
BEGIN 

SET @query =CONCAT(' 

select s.* from 
(

select * from 
(
SELECT something where condition IN (',param1,') 
) as table1 

UNION ALL 

select * from 
(
SELECT something where condition IN (',param2,') 
) as table2 

UNION ALL 

select * from 
(
SELECT something where condition IN (',param3,') 
) as table3 

) as s 

WHERE (s.publish_date < ',publishDate,') 
GROUP BY id limit ',tlimit,';'); 

PREPARE stmtInsert FROM @query; 
EXECUTE stmtInsert; 

END 

PARAM1、PARAM2、param3を爆縮されているので、私は、クエリとパラメータを連結することで回避策を持って配列、例えば( '1,2 、3,4 ')。これが誰かに役立つことを願っています

+0

@Akeem - 上記の解決策があなたのために働くならば、あなたの質問を "答えられていない"リストにもう表示されないようにあなたの答えを受け入れ可能な回答としてマークしてください。 – Guss

+0

私は試みましたが、自分の答えを受け入れる前に48時間待たなければならないというメッセージがありました。 – Akeem

+0

ありがとう、それは私がピンチで必要なものです。 idリストを一時テーブルにダンプすることは可能だと思うが、もっと時間があればそれを行うだろう。 – MvcCmsJon

1

ここでの主な問題は、MySQLがデータ型として配列をサポートしていないことです。メインデータと配列のデータに戻ってくる外部キーを含む別のテーブルに対して、one-to-manyの関係を形成する必要があります。

0

私はあなたがcsvとしてそれを渡す必要があると思います。 Mysqlは非常に親切ではありません。限りストアドプロシージャの言語に行く私は本当に不足しているMysqlを見つける。

関連する問題