Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> mysql multi insert w procedurze - jak?
adalgrim
post
Post #1





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 8.11.2005
Skąd: Zabrze

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


Witam,

Mam taki problem. Chciałbym zrobić multi inserta czyli np
INSERT INTO tabela (id, nazwa) VALUES (1,'aaa'), (2,'bbb') itd.

w procedurze składowanej gdzie wartości byłyby generowane w sposób automatyczny. Niestety mysql nie chce współpracować.

Oto kod:
  1. CREATE PROCEDURE `test`.`multiInsert`(IN userID int(11), IN sString VARCHAR(255))
  2.  
  3. BEGIN
  4. DECLARE sText VARCHAR(255) DEFAULT sString;
  5. DECLARE insertString TEXT;
  6. DECLARE cnt INT DEFAULT 0;
  7. DECLARE temp VARCHAR(255);
  8. DECLARE final_text VARCHAR(255);
  9.  
  10. SET cnt = substrCount(sText,';');
  11.  
  12. WHILE cnt > 0 DO
  13. SET temp = CONCAT(userID,', ',split_str(sText,';',cnt));
  14. SET insertString = CONCAT(insertString, '(', temp, '),');
  15. SET cnt = cnt - 1;
  16. END WHILE;
  17.  
  18. IF LENGTH(insertString) > 0 THEN
  19. DELETE FROM user_type WHERE user_id = userID;
  20. SET final_text = SUBSTRING(insertString, 1, (LENGTH(insertString)-1));
  21. INSERT INTO user_type (user_id, type) VALUES final_text;
  22. END;
  23.  
  24. END$$


Błąd wyrzuca w końcowym INSERCIE:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'final_text;
END;
END'

O co chodzi w procedurze? Pobrany parametr id usera np 1 oraz string z liczbami: '2;3;6;13;' ma być połączony by dać w efekcie (1,2),(1,3),(1,6),(1,13)
Wydaje mi się, że WHILE dobrze wykonuje swoje zadanie, ale jak teraz ten string wrzucić jako VALUES ?
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




przeciez skladnia insert wyglada tak:
  1. INSERT INTO user_type (user_id, type) VALUES (wart1,wart2);


a ty dales:
  1. INSERT INTO user_type (user_id, type) VALUES final_text;

Widzisz drobną roznice?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
adalgrim
post
Post #3





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 8.11.2005
Skąd: Zabrze

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


@nospor ale final_text jest wcześniej przygotowany z insertString...
  1. SET final_text = SUBSTRING(insertString, 1, (LENGTH(insertString)-1));


insertString to (1,'aa'),(1,'bb'),(1,'cccc'), - z tego ucinam ostatni przecinek, żeby nie było błędu a potem przypisuje do finala - ten jest wrzucany w INSERTA

Aha, no i Twój sposób nijak się ma do "multi inserta" smile.gif

Ten post edytował adalgrim 12.08.2009, 13:41:08
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




no ale co z tego? Nie rozumiesz ze skladnia jest taka a taka i mysql nie obchodzi co ty trzymasz w zmiennej final_text. To co podales nie odpowiada skladni i koniec kropka.

edit: takie przygotowanie tekstu w zmiennej to sobie w php mozesz zrobic i potem na podstawie tego stworzyc gotowego inserta. ale w samym mysql nie mozesz w taki sposob operować


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
adalgrim
post
Post #5





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 8.11.2005
Skąd: Zabrze

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


Składnie znam. Chodziło mi po prostu o takie potwierdzenie - że się nie da i już smile.gif
Dzięki.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 02:25