Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL] jak przekazać id do procedury, w przypadku gdy id jest wiele
fragles
post
Post #1





Grupa: Zarejestrowani
Postów: 110
Pomógł: 0
Dołączył: 14.12.2008

Ostrzeżenie: (0%)
-----


chodzi o coś takiego, że wybieram ileś tam typów i dla tych typów wywołuje procedurę
czyli po SQL-owemu byłoby to
WHERE id IN (1,2,3 itd)

przekazuję to jako tekst - '1,2,3' - w takiej formie
ale jest problem gdy wstawiam to bezpośrednio do zapytania mam błąd

Truncated incorrect DOUBLE value: '1,2,3'

a wynik jest pobierany tylko dla ID 1 (dokładniej dla pierwszego ID)

Jak to zrobić?


na razie robię tak
- zapytanie jako string
- na końcu w procedurze używam instrukcji

SET @dyn_sql=sqlQuery;
PREPARE s1 FROM @dyn_sql;
EXECUTE s1;
DEALLOCATE PREPARE s1;

ale czy można jakoś bezpośrednio do SQL - bez potrzeby tworzenia zapytania tekstu - przekazać wiele numerów ID?

Ten post edytował fragles 6.10.2009, 07:29:28
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
jmail
post
Post #2





Grupa: Zarejestrowani
Postów: 352
Pomógł: 53
Dołączył: 10.08.2009

Ostrzeżenie: (0%)
-----


  1.  
  2. --input - to jest parametr przekazywany do funkcji cyzli lista indexów
  3.  
  4. declare delim varchar(10) DEFAULT ',';
  5. declare foundPos tinyint UNSIGNED;
  6. declare tmpTxt text;
  7. declare delimLen tinyint UNSIGNED;
  8. declare element text;
  9.  
  10. DROP TEMPORARY TABLE IF EXISTS tmpValues;
  11. CREATE TEMPORARY TABLE tmpValues
  12. (
  13. valueId text NOT NULL DEFAULT ''
  14. ) engine = memory;
  15.  
  16. SET delimLen = length(delim);
  17. SET tmpTxt = input;
  18.  
  19. SET foundPos = instr(tmpTxt,delim);
  20. while foundPos <> 0 do
  21. SET element = substring(tmpTxt, 1, foundPos-1);
  22. SET tmpTxt = REPLACE(tmpTxt, concat(element,delim), '');
  23.  
  24.  
  25. INSERT INTO tmpValues (valueId) VALUES ( element);
  26.  
  27. SET foundPos = instr(tmpTxt,delim);
  28. end while;
  29.  
  30. IF tmpTxt <> '' then
  31. INSERT INTO tmpValues (valueId) VALUES (tmpTxt);
  32. end IF;
  33.  
  34. --i robisz
  35.  
  36. SELECT bla bla bla WHERE id IN (SELECT valueId FROM tmpValues)
  37.  


na koniec zdropuj tmpValues

Ten post edytował jmail 6.10.2009, 14:08:24
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 14.10.2025 - 22:58