Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MYSQL] Jak kasować dane z wielu tabel jednocześnie?
mefjiu
post
Post #1





Grupa: Zarejestrowani
Postów: 313
Pomógł: 5
Dołączył: 22.03.2005

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


Witam mam pytanie jak kasować dane z wielu tabel jednocześnie?
szukałem google, ale jedyne co znalazłem to http://algorytmy.pl/?id=1043, a niestety nie mam tam dostępu :-(
Zna ktoś sposób na kasowanie tych danych ?

Z góry dziękuję za odpowiedź
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 15)
bełdzio
post
Post #2





Grupa: Zarejestrowani
Postów: 690
Pomógł: 81
Dołączył: 6.04.2005
Skąd: Szczecin

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


napisz zastosowanie, moze wystarczy stworzyc odpowiednia relacje?


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





Grupa: Zarejestrowani
Postów: 313
Pomógł: 5
Dołączył: 22.03.2005

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


Chciałbym za jednym zamachem skasować dane z 2 tabel są one ze sobą powiązane kolumną
Serp_site.id = Serp_site_statistics.id_site
Go to the top of the page
+Quote Post
phpion
post
Post #4





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




Cytat(bełdzio @ 8.03.2009, 19:21:33 ) *
moze wystarczy stworzyc odpowiednia relacje?

To zdecydowanie najlepsze wyjście. Tworzysz relację między tabelami nadając jej ON DELETE CASCADE i po sprawie. Jedyne ograniczenie to typ tabel: dla MYSQL musi to być InnoDB.
Go to the top of the page
+Quote Post
mefjiu
post
Post #5





Grupa: Zarejestrowani
Postów: 313
Pomógł: 5
Dołączył: 22.03.2005

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


Nie bardzo rozumiem ? A czy koniecznie muszę zmieniać typ tabel na InnoDB dla jednego zastosowania szkoda tyle zachodu. Czy nie ma czegoś prostszego ? w algorytmy.pl zapewne jest banalny sposób.
Go to the top of the page
+Quote Post
marcio
post
Post #6





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

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


Robisz kilka zapytan albo tablice z danymi i potem petla for/foreach a w niej zapytanie sql do kasowania tongue.gif


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
bełdzio
post
Post #7





Grupa: Zarejestrowani
Postów: 690
Pomógł: 81
Dołączył: 6.04.2005
Skąd: Szczecin

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


Cytat(mefjiu @ 8.03.2009, 17:37:45 ) *
Nie bardzo rozumiem ? A czy koniecznie muszę zmieniać typ tabel na InnoDB dla jednego zastosowania szkoda tyle zachodu. Czy nie ma czegoś prostszego ? w algorytmy.pl zapewne jest banalny sposób.

zalozmy ze masz 2 tabele kategorie i produkty kazdy produkt nalezy do kategorii, i teraz dzieki relacja usuniecie kategorii skutkuje automatycznym usunieciem produktow ktore do niej nalezaly

a co do zachodu to wystarczy
  1. ALTER TABLE tabela ENGINE = InnoDB


--------------------
Go to the top of the page
+Quote Post
mefjiu
post
Post #8





Grupa: Zarejestrowani
Postów: 313
Pomógł: 5
Dołączył: 22.03.2005

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


Cytat(marcio @ 8.03.2009, 17:50:58 ) *
Robisz kilka zapytan albo tablice z danymi i potem petla for/foreach a w niej zapytanie sql do kasowania tongue.gif


w tym cały senk aby to zrobić za jednym zapytaniem :-) pętlą to no problem

Cytat(bełdzio @ 8.03.2009, 17:52:50 ) *
zalozmy ze masz 2 tabele kategorie i produkty kazdy produkt nalezy do kategorii, i teraz dzieki relacja usuniecie kategorii skutkuje automatycznym usunieciem produktow ktore do niej nalezaly

a co do zachodu to wystarczy
  1. ALTER TABLE tabela ENGINE = InnoDB


To zastosowanie posypie mi resztę kodu.

Udało mi się odkopać jakiś stary temat w którym poruszany jest ten problem
http://forum.php.pl/index.php?showtopic=54...=0&p=295800
Niestety tu tez kolega nie uzyskał informacji.

Wiec jak widać to nie taki prosty problem.
Go to the top of the page
+Quote Post
marcio
post
Post #9





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

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


A jaki masz problem zeby to skasowac kilkoma zapytaniami?


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
mefjiu
post
Post #10





Grupa: Zarejestrowani
Postów: 313
Pomógł: 5
Dołączył: 22.03.2005

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


Cytat(marcio @ 8.03.2009, 18:03:15 ) *
A jaki masz problem zeby to skasowac kilkoma zapytaniami?


Znaczne zmniejszenie wydajności kodu.
Go to the top of the page
+Quote Post
kefirek
post
Post #11





Grupa: Zarejestrowani
Postów: 781
Pomógł: 256
Dołączył: 29.06.2008

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


Robisz coś w ten desen
  1. DELETE FROM tabela1 LEFT JOIN tabela2 ON t1.id=t2.id
Go to the top of the page
+Quote Post
bełdzio
post
Post #12





Grupa: Zarejestrowani
Postów: 690
Pomógł: 81
Dołączył: 6.04.2005
Skąd: Szczecin

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


Cytat(mefjiu @ 8.03.2009, 17:59:17 ) *
To zastosowanie posypie mi resztę kodu.

why?


--------------------
Go to the top of the page
+Quote Post
marcio
post
Post #13





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

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


Cytat
Znaczne zmniejszenie wydajności kodu.

Omg przy 2 zapytaniach wiele zasobow ci nie wezmie tongue.gif


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
mefjiu
post
Post #14





Grupa: Zarejestrowani
Postów: 313
Pomógł: 5
Dołączył: 22.03.2005

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


Cytat(marcio @ 8.03.2009, 18:18:13 ) *
Omg przy 2 zapytaniach wiele zasobow ci nie wezmie tongue.gif


Ale skoro jest sposób to warto to wykorzystać, jak tak wszędzie będę przymykał oko to wtedy aplikacja będzie zasobo żerna.

Rozwiązanie znalezione podaje dla kolejnych szukjaacych
  1. DELETE mss, msss FROM Serp_site AS mss LEFT JOIN Serp_site_statistics AS msss ON mss.id=msss.id_site
  2. WHERE msss.id_site IS NULL OR mss.id=4


Ten post edytował mefjiu 8.03.2009, 18:44:06
Go to the top of the page
+Quote Post
nexik
post
Post #15





Grupa: Zarejestrowani
Postów: 14
Pomógł: 1
Dołączył: 23.12.2008
Skąd: Radzionków

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


krótszy kod != wydajniejszy

jak chcesz wyczyscic 2 tabele to najlepiej
TRUNCATE TABLE tabela1
TRUNCATE TABLE tabela2


--------------------
Tomasz Ślązok Nexik
http://www.nexik.net/
Go to the top of the page
+Quote Post
mls
post
Post #16





Grupa: Zarejestrowani
Postów: 677
Pomógł: 89
Dołączył: 31.08.2003
Skąd: Warszawa

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


Cytat(mefjiu @ 8.03.2009, 18:23:06 ) *
Ale skoro jest sposób to warto to wykorzystać, jak tak wszędzie będę przymykał oko to wtedy aplikacja będzie zasobo żerna.

Rozwiązanie znalezione podaje dla kolejnych szukjaacych
  1. DELETE mss, msss FROM Serp_site AS mss LEFT JOIN Serp_site_statistics AS msss ON mss.id=msss.id_site
  2. WHERE msss.id_site IS NULL OR mss.id=4


Skoro już taki "optymalny" jesteś to wiedz, że LEFT JOIN jest znacznie mniej wydajne od wykonania dwóch zapytań bez łączenia ich ze sobą.
Tak jak przedmówcy wspomnieli, albo usuwaj w jakiejś pętli (wówczas najlepiej z transakcjami) albo ustaw triggery.


--------------------
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:22