2012-10-29 14 views
26

Diciamo che ho un SP che ha un SELECT dichiarazioni come segue,Come passare una variabile ad una clausola IN?

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

Ma i dati che va a IN clausola deve avvenire attraverso una singola variabile che contiene la stringa di valori. Qualcosa di link sotto

SELECT product_id, product_price FROM product 
WHERE product_type IN (input_variables); 

Ma non funziona in quel modo. Qualche idea su come fare questo?

+3

da dove proviene 'input_variables'? 'php?' –

+0

è in realtà un esecuzione MYSQL diretta da un cron job, quindi è uno dei parametri di input del SP. l'utente li inserisce dipende da quali dati vogliono. – Thanu

+1

quindi vuoi dire che è un valore separato da virgole in una singola variabile? –

risposta

38

Passo valore del parametro come questo - 'AA,BB,CC'. Poi, è sufficiente utilizzare FIND_IN_SET funzione -

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

funziona Grazie !! – danielad

+0

@danielad Benvenuto) – Devart

+3

ciò comporterà l'esecuzione della query su tutta la tabella senza indice. Anche se non robusto, questa è una risposta valida –

3

creare una funzione definita dall'utente che convertirà il valore separato da virgola in tabella e unendosi a questi due si otterrà il risultato desiderato.

for more

2

passando una stringa utilizzando una variabile è stato un problema assumere questa soluzione

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 

chiamata la procedura dal finestrino altra query

call `spTestListValues`('4,5,3'); --no paramter currently for test 

uscita

ID Description 
NUll 
1 TEST1 
4 TEST2 
5 TEST3 
Problemi correlati