2012-10-29 14 views
26

Powiedzmy mam SP, który ma SELECT oświadczenia następująco,Jak przekazać zmienną do klauzuli IN?

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

Ale dane idzie do IN klauzula musi być za pośrednictwem pojedynczej zmiennej, która zawiera łańcuch wartości. Coś poniżej

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

Ale nie działa w ten sposób. Masz pomysł, jak to zrobić?

+3

skąd pochodzi 'input_variables'? 'php?' –

+0

to właściwie bezpośrednie wykonanie MYSQL z zadania cron, więc jest to jeden z parametrów wejściowych SP. użytkownik wchodzi do nich zależy od tego, jakie dane chcą. – Thanu

+1

, co oznacza, że ​​jest to wartość oddzielona przecinkami w pojedynczej zmiennej? –

Odpowiedz

38

wartość parametru Przełęcz tak - 'AA,BB,CC'. Następnie wystarczy użyć FIND_IN_SET funkcja -

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

działa dzięki! – danielad

+0

@danielad Welcome) – Devart

+3

spowoduje to uruchomienie zapytania we wszystkich tabelach bez indeksu. Niezbyt wytrzymałe, nawet myśl, że jest to ważna odpowiedź –

3

utworzyć zdefiniowaną przez użytkownika funkcję, która przekształci wartość rozdzielaną przecinkami na tabelę, a po połączeniu ta dwójka może uzyskać pożądany wynik.

for more

2

przechodzącą ciąg użyciu zmiennej był problem zakładamy to rozwiązanie

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 

Wywołanie procedury z okna innych zapytań

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

wyjście

ID Description 
NUll 
1 TEST1 
4 TEST2 
5 TEST3 
Powiązane problemy