Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: DELETE z wielu tabel
Forum PHP.pl > Forum > Bazy danych > MySQL
koskitos
Jak w jednym zapytaniu usunąć dane z wielu tabel na podstawie warunku z jednej tabeli.
Wszystkie są powiązane jednym ID. Sprawdzam warunek w jednej tabeli i usuwam wszystkie o danym ID.

Od razu zaznaczam: nie chcę używać usuwania kaskadowego!
SongoQ
http://dev.mysql.com/doc/refman/5.1/en/delete.html

Na dole masz o to taki przyklad
  1. DELETE t1, t2 FROM t1, t2, t3 WHERE t1.id=t2.id AND t2.id=t3.id;
koskitos
To nie działa.
Ja stawiam warunek w jednej tabeli i chce usunąć z wszystkich (ale nie w każdej jest taki rekord).

W Twoim przykładzie, delete usunie jeżeli warunek zostanie spełniony i jeżeli we wszystkich tabelach będzie rekord o danym id.

Chyba rozumiesz mnie.

EDIT:
Temat nadal aktualny.
Rozwiązanie jest mi bardzo potrzebne, więc nadal czekam na odpowiedzi!
SongoQ
Mozesz pokazac na konkretnym przykladzie bo nie zrozumialem czy chodzi Ci o left join czy jeszcze inne rzeczy.
koskitos
Załóżmy mam tabele:
  1. USERS
  2. id_u
  3. pole1
  4. pole2
  5. ostatnia_wizyta


  1. WPISY
  2. id_u
  3. pole3
  4. pole4


  1. KONTAKTY
  2. id_u
  3. pole5


I teraz chce usunac wszystkich uzytkownikow, ktorzy nie odwiedzali mojej strony w ciągu ostatnich 2 lat. Chcę usunąć o nim wszelkie informacje z wszystkich tabel

EDIT
Jest mi to nadal, a naprawdę bardzo potrzebne.
Bardzo proszę o pomoc.
Nie wierzę, że nie wiecie!
thornag
  1. DELETE FROM user,wpisy, kontakty WHERE kontakty.id_u=user.id_u AND wpisy.id_u=user.id_u AND user.ostatnia_wizyta < NOW()-czas jaki tam chcesz
koskitos
Mój drugi post
Zadziała, jeżeli w każdej tabeli jest rekord o jakimś ID. Jeżeli chociaż w jednej tabeli nie bęzie rekordu, to nie zadziałą.
thornag
Na moje to on wezmie wszystkie rekordy z user gdzie data jest sprzed dwoch lat. Pozniej korzystajac z usyskanych id pojdzie do nastepnej tabeli znajdzie rekordy pasujace usunie je. Pozniej nastepna tabela usunie i na koncu usunie sam siebie smile.gif
koskitos
Twój kod ma takie samo działanie jak SongoQ.
Próbowałem takiego rozwiązania przed założeniem tematu.

Aby Ci rozjaśnić umysł: jeżeli w tabeli USERS istnieje rekord o ID = 3, a w żadnej innej tabeli nie ma rekordu i ID = 3, pomimo iż warunek został spełniony ten rekord nie zostanie usunięty.
siemakuba
sprawdził bym coś takiego:
  1. DELETE FROM user, wpisy,kontakty
  2. WHERE kontakty.user_id = user.id AND wpisy.user_id = user.id AND user.id IN (SELECT id FROM user WHERE *warunki*)


nie sprawdzane w żaden sposób, ale myślę, że warto spróbować.

pozdr.
koskitos
To też nie działa.
Wy nie widzicie nielogiki waszych kodów.
Rekordy zostaną usunięte jeżeli pole równe jest jakiemuś polu i jakieś pole jest równejakiemuś polu.
A jeżeli pole nie istnieje?

Myślałem o LEFT JOIN, ale coś nie wychodzi mi. :/
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.