Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] masowy INSERT INTO - czym zastąpić?
looimaster
post
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 26.01.2008

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


Natknąłem się na pewien problem związany z systemem wysyłania wiadomości. Chciałbym dodać na stronę opcję "wiadomość do wszystkich" ale zakładając że na stronie byłoby np. 1000 kont zwykła pętla wykonałaby się 1000 razy za każdym razem dodajć rekord dla poszczególnego konta. Jak zmienić taką pętlę na coś wydajniejszego?

Baza danych: MySQL
Nie mogę oczywiście zrobić oddzielnej tabeli na grupowe wiadomości, bo co się stanie jak jedna osoba to np. usunie? Druga już nie będzie widziała wiadomości. Każdy musi mieć swoją.
Z góry dziękuję za wszelkie pomysły.
Go to the top of the page
+Quote Post
phpion
post
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Możesz robić INSERTy w paczkach, tj. zamiast:
  1. INSERT INTO tab (pole) VALUES ("wartosc1");
  2. INSERT INTO tab (pole) VALUES ("wartosc2");
  3. INSERT INTO tab (pole) VALUES ("wartosc3");
  4. INSERT INTO tab (pole) VALUES ("wartosc4");
  5. INSERT INTO tab (pole) VALUES ("wartosc5");
  6. INSERT INTO tab (pole) VALUES ("wartosc6");

zrobić tak (przykładowa paczka zawierająca po 3 wpisy:
  1. INSERT INTO tab (pole) VALUES ("wartosc1"), ("wartosc2"), ("wartosc3");
  2. INSERT INTO tab (pole) VALUES ("wartosc4"), ("wartosc5"), ("wartosc6");

Dzięki temu z 6 zapytań robią się 2. Pamiętaj tylko aby nie przesadzić z liczbą danych wrzucanych za jednym zamachem (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
specialplan
post
Post #3





Grupa: Zarejestrowani
Postów: 206
Pomógł: 21
Dołączył: 1.09.2006
Skąd: Edinburgh

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


Jesteś pewny, że taka funkcjonalność to dobry pomysł? Skoro już musisz, zakładając, że tabela z wiadomościami wygląda np tak:
id wiadomosci | id uzytkownika | tresc wiadomosci (uproszczona wersja), to osobiście załadowałbym wszystkie ID użytkowników + treść wiadomości do pliku tekstowego i wrzucił to do bazy za pomocą LOAD DATA INFILE
Go to the top of the page
+Quote Post
WAN
post
Post #4





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 30.12.2007

Ostrzeżenie: (10%)
X----


Cytat
Pamiętaj tylko aby nie przesadzić z liczbą danych wrzucanych za jednym zamachem (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Moglbys to rozwinac? Ile to jest za duzo i od czego to zalezy?
Go to the top of the page
+Quote Post
phpion
post
Post #5





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Ciężko powiedzieć. Zależy jakie dane będziesz wrzucał i do ilu pól. Różnica będzie między liczbą do jednego pola, a np. wypracowaniami z polskiego do 10 pól (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Wydaje mi się, że taka optymalna paczka powinna zawierać się w przedziale <5, 10> INSERTów.
Go to the top of the page
+Quote Post
heaven
post
Post #6





Grupa: Nieautoryzowani
Postów: 92
Pomógł: 15
Dołączył: 21.10.2006

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


Taki przypadek jak Twoj mozna zrobic jednym insert'em. W skrócie to wyglada tak...
  1. INSERT INTO wiadomosci (users_id,wiadomosc) SELECT user_id, 'to jest wiadomosc do wszystkich' FROM users;


Ten post edytował heaven 10.02.2008, 20:02:09
Go to the top of the page
+Quote Post
webdice
post
Post #7


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




Cytat(heaven @ 10.02.2008, 20:01:52 ) *
Taki przypadek jak Twoj mozna zrobic jednym insert'em. W skrócie to wyglada tak...
  1. INSERT INTO wiadomosci (users_id,wiadomosc) SELECT user_id, 'to jest wiadomosc do wszystkich' FROM users;


Gdzie VALUES, gdzie nawiasy?
Go to the top of the page
+Quote Post
heaven
post
Post #8





Grupa: Nieautoryzowani
Postów: 92
Pomógł: 15
Dołączył: 21.10.2006

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


VALUES podajesz jak piszesz konkretne wartosci a tu wartoscią (wartosciami) jest wynik zapytania czyli dwie kolumny (tyle ile trzeba do inserta) z wierszami w ktorych w pierwszej kolumnie jest users_id wszystkich uzytkownikow a w drugiej kolumnie w kazdym wierszu zawsze jest ta sama wiadomosc.

Sprawdz sam na jakims przykladzie...

Ten post edytował heaven 10.02.2008, 20:38:42
Go to the top of the page
+Quote Post

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: 23.12.2025 - 10:23