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
Antwort
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
@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
Ich versuchte es, aber ich bekam eine Nachricht, dass ich 48 Stunden warten muss, bevor ich meine eigene Antwort akzeptiere. – Akeem
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
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.
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.
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