Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [mysql] INSERT do kilku tabel, wstawianie rekordow do wielu tabel jednym zapytaniem
funky_beat
post 30.08.2007, 11:15:41
Post #1





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 24.05.2007
Skąd: Bełchatów

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


Jak powino wyglądać zapytanie wstawiające rekordy to na przyklad dwoch tabel jednoczesnie?
Go to the top of the page
+Quote Post
in5ane
post 30.08.2007, 11:32:22
Post #2





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

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


Moim skromnym zdaniem możesz zrobić:

  1. $query1="INSERT INTO tabela_1 (plak) VALUES ('$plak')";
  2.  
  3. $query2="INSERT INTO tabela_2 (plak) VALUES ('$plak')";



P.S.: Możliwe, że się myle.

Ten post edytował in5ane 30.08.2007, 11:33:03


--------------------
> > > Tworzenie stron < < <
Go to the top of the page
+Quote Post
funky_beat
post 30.08.2007, 11:35:17
Post #3





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 24.05.2007
Skąd: Bełchatów

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


ale mi chodzi o to zeby jednym zapytaniem to zrobic sad.gif
Go to the top of the page
+Quote Post
drPayton
post 30.08.2007, 11:38:29
Post #4





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

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


Nie da się. Nie istnieje składnia dla INSERTa na wiele tabel jednocześnie (choć dziwne to jest, przyznam)
Go to the top of the page
+Quote Post
Cienki1980
post 30.08.2007, 11:39:54
Post #5





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

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


Jakoś nie wydaje mi się, żeby była taka możliwość. Ja mimo tego, że w sql'u siedzę już ładnych parę lat nie spotkałem się z takim zapytaniem.

A dlaczego koniecznie musi być to jedno zapytanie do wielu tabel questionmark.gif


--------------------
404
Go to the top of the page
+Quote Post
drPayton
post 30.08.2007, 11:42:43
Post #6





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

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


Bodajże w starych (początki 4) wersjach MySQL była taka możliwość. Ale może mi się przywidziało.
Go to the top of the page
+Quote Post
Grzyw
post 30.08.2007, 11:44:57
Post #7





Grupa: Zarejestrowani
Postów: 561
Pomógł: 75
Dołączył: 19.08.2004
Skąd: Wrocław

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


Kilka rekordów do 1 tabeli da się, 1 rekord do wielu tabel już nie.
Ale jeżeli chcesz to zrobić możliwie najwydajniej, wyklikaj funkcję, która jako argument przyjmie tablice z nazwami tabel, a w tej funkcji będzie realizowane query do bazy z miejsce nazwy tabeli wstawiając kolejne ementy z tablicy.

Ten post edytował Grzyw 30.08.2007, 11:45:17


--------------------
Idąc po czyichś śladach, nie zajdziesz ani kroku dalej...
Go to the top of the page
+Quote Post
funky_beat
post 30.08.2007, 11:45:27
Post #8





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 24.05.2007
Skąd: Bełchatów

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


moze to troche smieszne co napisze, ale chciałem to napisac w jednym zapytaniu po to aby do tego jednego zapytania zrobic warunek:

  1. <?php
  2. $query = "INSERT INTO tabela1 (kolumna1) VALUES ('$wartosc')";
  3. $result = @mysql_query ($query);
  4. if ($result) { 
  5.  
  6. echo 'Rekord zapisany';
  7.  
  8. exit();
  9. ?>
Go to the top of the page
+Quote Post
drPayton
post 30.08.2007, 11:50:17
Post #9





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

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


Śmieszne bynajmniej to nie jest. Możesz zrobić to tak, że po każdym insercie, jeśli OK do tablicy idzie wartość, np true, a jak błąd to false. I dopiero po wszystkich zapytaniach sprawdzasz, czy w tablicy znajduje się wartość false (przynajmniej jedna). Jeśli tak - to komunikat błędu, jeśli nie, to znaczy że wszystko poszło ok. np:
  1. <?php
  2. $tab = array();
  3. // początek pętli insertów
  4. $query = "INSERT INTO tabela1 (kolumna1) VALUES ('$wartosc')";
  5. $result = @mysql_query ($query);
  6. if ($result) { 
  7. $tab[] = true
  8. } else {
  9. $tab[] = false;
  10. }
  11. // koniec pętli insertów
  12. if(in_array(false, $tab)) {
  13. echo "coś nie halo!";
  14. } else {
  15. exit();
  16. }
  17.  
  18. ?>


Ten post edytował drPayton 30.08.2007, 11:53:46
Go to the top of the page
+Quote Post
funky_beat
post 30.08.2007, 11:55:15
Post #10





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 24.05.2007
Skąd: Bełchatów

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


czyli w ten sposob?

  1. <?php
  2. $query1 = "INSERT INTO tabela1 (kolumna1) VALUES ('$wartosc1')";  //pierwszy insert
  3. $result1 = @mysql_query ($query1);
  4.  
  5. $query2 = "INSERT INTO tabela2 (kolumna1) VALUES ('$wartosc2')";  //drugi insert
  6. $result2 = @mysql_query ($query2);
  7.  
  8. if ($result1 && $result2)
  9. {
  10.  
  11. echo 'Rekord zapisany';
  12.  
  13.  
  14. exit(); 
  15.  
  16. }
  17. ?>
Go to the top of the page
+Quote Post
PanGuzol
post 30.08.2007, 12:07:56
Post #11





Grupa: Zarejestrowani
Postów: 353
Pomógł: 50
Dołączył: 28.07.2005
Skąd: Łaziska Górne

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


Pokombinuj z mysqli_autocommit" title="Zobacz w manualu PHP" target="_manual


--------------------
Sposób na życie? Uśmiech na twarzy :D
"Widzę więcej, wiem więcej, tak to jest mniej więcej"
"NIE kradnij, rząd nielubi konkurencji"
Go to the top of the page
+Quote Post
envp
post 30.08.2007, 12:09:02
Post #12





Grupa: Zarejestrowani
Postów: 359
Pomógł: 1
Dołączył: 16.04.2006
Skąd: Łódź

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


A co z transakcjami Panowie ? smile.gifsmile.gif
Go to the top of the page
+Quote Post
Cienki1980
post 30.08.2007, 12:11:07
Post #13





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

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


Cytat(envp @ 30.08.2007, 13:09:02 ) *
A co z transakcjami Panowie ? smile.gifsmile.gif

Nic biggrin.gif

Transakcje mogą tylko pomóc w przypadku gdy z 10 INSERTów przynajmniej jedno się nie powiedzie i wtedy chcesz wycofać pozostałe 9.

Ale nie zmienia to faktu ze musisz wykonać 10 zapytań INSERT ... plus jedno na początku BEGIN TRANSACTION i w przypadku powodzenia COMMIT TRANSACTION lub w przypadku błędu ROLLBACK TRANSACTION.


--------------------
404
Go to the top of the page
+Quote Post
funky_beat
post 30.08.2007, 12:23:16
Post #14





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 24.05.2007
Skąd: Bełchatów

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


a tak przy okazji. Jaka funkcja zwraca id ostatniego inserta?
Go to the top of the page
+Quote Post
Cienki1980
post 30.08.2007, 12:25:19
Post #15





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

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


Cytat(funky_beat @ 30.08.2007, 13:23:16 ) *
a tak przy okazji. Jaka funkcja zwraca id ostatniego inserta?


Manual mówi: mysql_insert_id" title="Zobacz w manualu PHP" target="_manual


--------------------
404
Go to the top of the page
+Quote Post
jastu
post 30.08.2007, 14:21:46
Post #16





Grupa: Zarejestrowani
Postów: 382
Pomógł: 0
Dołączył: 29.11.2005
Skąd: :jestem();

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


Wyzwalacz albo widok albo widok i wyzwalacz smile.gif


--------------------
Powyższy post wyraża jedynie opinię autora w dniu dzisiejszym. Nie może on służyć przeciwko niemu w dniu jutrzejszym. Ponadto autor zastrzega sobie prawo zmiany poglądów, bez podawania przyczyny.
Go to the top of the page
+Quote Post
--qooxdoo--
post 30.08.2007, 14:55:29
Post #17





Goście







  1. INSERT INTO tabela1 VALUES('val1'); INSERT INTO tabela2 VALUES('val2');

Nie słyszałem o czymś takim jak wpisywanie wartości do wielu tabel za pomocą jednednego zapytanie insert. Ale to powyżej zadziała tak samo, jakbyś oczekiwał
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 Wersja Lo-Fi Aktualny czas: 23.07.2025 - 01:14