2009-02-27 7 views
7

Ich versuche, ein Array von Werten von PHP zu mysql gespeicherten Prozeduren als Parameterliste übergeben und wie Sie das Array innerhalb der gespeicherten Prozedur verwenden. Die Abfrage in der Prozedur hat drei IN-Anweisungen drin, also würde ich gerne IN(@listOfids) tun, wobei @listOfids 1,2,3,4 ist (ein implodiertes Array von PHP).Übergeben Sie Array in eine gespeicherte Prozedur

+0

Könnten Sie einen Teil Ihres Codes veröffentlichen, indem Sie Ihre Antwort bearbeiten, so dass wir besser verstehen können, was Sie von dort aus erreichen wollen? – lpfavreau

Antwort

5

Also habe ich eine Abhilfe, die die Abfrage und die Parameter zu verketten ist, so dass die Pseudo-Code ist

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 sind implodiert Arrays, die über PHP zB übergeben wird in ('1,2 , 3,4 '). Hoffe, das hilft jemandem

+0

@Akeem - Wenn die obige Lösung für Sie funktioniert, markieren Sie Ihre Antwort als akzeptable Antwort, damit Ihre Frage nicht mehr in der "unbeantworteten" Liste erscheint. – Guss

+0

Ich versuchte es, aber ich bekam eine Nachricht, dass ich 48 Stunden warten muss, bevor ich meine eigene Antwort akzeptiere. – Akeem

+0

Danke, das ist, was ich im Notfall brauchte. Ich denke, es ist möglich, die ID-Liste in eine temporäre Tabelle zu schreiben, aber ich werde das tun, wenn ich mehr Zeit habe. – MvcCmsJon

1

Ich denke, das Hauptproblem hier ist, dass MySQL Arrays nicht als Datentyp unterstützt. Sie müssen eine one-to-many Beziehung zu einer anderen Tabelle bilden, die einen Fremdschlüssel zurück zu Ihren Hauptdaten und den Daten des Arrays enthält.

0

Ich denke, Sie müssen es als csv übergeben. Mysql ist nicht sehr freundlich mit Looping und so Ihr wahrscheinlich am besten tun Sie es sowieso. Was die Stored Procedure-Sprachen betrifft, so finde ich, dass Mysql wirklich fehlt.