2009-02-27 14 views
7

Sto provando a passare una matrice di valori da PHP a stored procedure mysql come elenco di parametri e come utilizzare la matrice all'interno della stored procedure. La query nella procedura ha tre istruzioni IN in là quindi mi piacerebbe fare IN(@listOfids) dove @listOfids è 1,2,3,4 (una matrice implosa da php).Passa array in una procedura memorizzata

+0

Potresti postare parte del tuo codice modificando la tua risposta in modo che possiamo capire meglio cosa stai cercando di ottenere e lavorare da lì? – lpfavreau

risposta

5

così ho ottenuto una soluzione che è quello di concatenare la query e parametri in modo che il codice di pseudo

array
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 sono implose che viene passato in via php per esempio ('1,2 , 3,4'). Spero che questo aiuti qualcuno

+0

@Akeem: se la soluzione di cui sopra funziona per te, contrassegna la risposta come risposta accettabile in modo che la tua domanda non venga più visualizzata nell'elenco "senza risposta". – Guss

+0

Ho provato ma ho ricevuto un messaggio che diceva che devo aspettare 48 ore prima di accettare la mia risposta. – Akeem

+0

Grazie, questo è quello che mi serviva in un pizzico. Penso che sia possibile scaricare la lista ID in una tabella temporanea, ma lo farò quando avrò più tempo. – MvcCmsJon

1

Penso che il problema principale qui sia che MySQL non supporta gli array come tipo di dati. È necessario creare una relazione one-to-many con un'altra tabella che contenga una chiave esterna sui dati principali e i dati dell'array.

0

Penso che devi passarlo come un csv. Mysql non è molto amichevole con il looping e quindi probabilmente lo faresti meglio al di fuori comunque. Per quanto riguarda i linguaggi memorizzati, trovo che Mysql manchi davvero.

Problemi correlati