Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> dodawanie rekordu do kilku tabel jednocześnie
Jozjasz
post
Post #1





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 11.09.2009

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


Witam

Jeśli posiadam następującą bazę danych

O nazwie: ‘super’, w której gromadzę superbohaterów i odpowiadających im aktorów.

Actors(actor_id, actor_name, actor_surname)
Hero(id, actor_id, name, place, weapon, skills) - 'actor_id' jest kluczem obcym

To żeby połączyć te dwie tabele to wpiszę np.: select * from actors INNER JOIN hero using(actor_id);

Z ‘select’ jest sprawa jasna, a co jeśli chcę dodać nowy record do dwóch tabel jednocześnie? – żeby klucz actor_id pojawił się jednocześnie w obu tabelach dla zachowania spójności. Czy może się nie da i trzeba oddzielnie napisać dwa zapytania?
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




Dwa zapytania.


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

"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
Jozjasz
post
Post #3





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 11.09.2009

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


OK, dzięki, udało mi się stworzyć coś takiego, co działa:

  1. <?php
  2.  
  3. //napisano przeze mnie...
  4.  
  5. $name = 'Patric';
  6. $sur = 'Steward';
  7.  
  8. $con = mysqli_connect('localhost','Jacob','Dankan34r','super');
  9.  
  10. $q = "insert into actors values(NULL, '$name', '$sur')";
  11.  
  12. $r = mysqli_query($con, $q) or die(mysqli_error($con));
  13.  
  14. $actor_id = mysqli_insert_id($con);
  15.  
  16.  
  17. if($r){
  18.  
  19. $q = "insert into heros values(NULL, '$actor_id', 'Profesor Xavier', 'USA', NULL, 'reading thoughts')";
  20.  
  21. $r2 = mysqli_query($con, $q) or die(mysqli_error($con));
  22.  
  23. }
  24.  
  25. if($r and $r2){
  26.  
  27. echo 'Dodano nowy rekord do bazy o id: '.$actor_id;}
  28.  
  29. ?>


Ale teraz patrzę po necie nie mogę znaleźć jak usunąć za pomoca DELETE z dwóch tabel, lub więcej, rekord powiązany ze sobąquestionmark.gif Czy mógłby mi ktoś pomóc z tym?

Ten post edytował Jozjasz 7.12.2011, 14:39:36
Go to the top of the page
+Quote Post
luckyps
post
Post #4





Grupa: Zarejestrowani
Postów: 153
Pomógł: 41
Dołączył: 28.06.2011
Skąd: Częstochowa

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


Poszukaj o usuwaniu kaskadowym.
Go to the top of the page
+Quote Post
Jozjasz
post
Post #5





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 11.09.2009

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


To kaskadowe chyba działa tyko w InnoDB, a ja mam MyISAM i nie chcę tego zmienić. Nie ma jakiejś prostszej metody? Np. jeśli chciałbym usunąć 'actors.actor_id=13', który jest w dwóch tabelach...
Go to the top of the page
+Quote Post
nospor
post
Post #6





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




No to zrób dwa delete. Masz dwa insert to czemu nie możesz zrobic dwa delete?

Pozatym w manualu przy delete masz podaną składnią jak w jednym zapytaniu usunąć z dwóch tabel
http://dev.mysql.com/doc/refman/5.0/en/delete.html


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

"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
Jozjasz
post
Post #7





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 11.09.2009

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


No właśnie nie chce mi działać ... niby jest błąd, np piszę tak:
  1. DELETE FROM actors.actor_id, heros.actor_id FROM actors, heros WHERE actors.actor_id=13 AND heros.actor_id=13;


Ten post edytował Jozjasz 7.12.2011, 17:49:57
Go to the top of the page
+Quote Post
nospor
post
Post #8





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




W linku co ci podałem, nigdzie nie widzę, by pomiędzy SELECT....FROM podawano nazwy kolumn. Dokumentacja jest oparta dobrymi przykładami. Trzeba się naprawdę mocno starać, by napisać to źle.
Wcześniej widziałem wersję jak mialeś dwa FROM.
Skup się trochę.


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

"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
Adi32
post
Post #9





Grupa: Zarejestrowani
Postów: 348
Pomógł: 26
Dołączył: 8.10.2008
Skąd: Lublin

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


Dlaczego zleży Ci na tym aby pozostać na MyISAM?
Do tego typu zapytań, gdzie jedna czynność powoduje więcej niż jedną relację z bazą danych i nie są to selekty to zaleca się użycie transakcji, oczywiście w zależności do czego ma służyć ta baza... - MyISAM nie obsługuje transakcji.
Poza tym 'actor_id' nie jest kluczem obcym tylko pseudo kluczem obcym gdyż MyISAM nie obsługuje relacji tabel...

Ten post edytował Adi32 8.12.2011, 09:43:16


--------------------
Wolałem języki z rodziny C ale poszedłem na łatwizne...
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: 19.08.2025 - 03:31