Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> DELETE z wielu tabel
koskitos
post 22.09.2006, 19:49:25
Post #1





Grupa: Zarejestrowani
Postów: 149
Pomógł: 0
Dołączył: 18.04.2004
Skąd: Z nikąd

Ostrzeżenie: (30%)
XX---


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!


--------------------
kOskiToS :D
Go to the top of the page
+Quote Post
SongoQ
post 23.09.2006, 08:15:47
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


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;


--------------------
Go to the top of the page
+Quote Post
koskitos
post 28.09.2006, 14:37:45
Post #3





Grupa: Zarejestrowani
Postów: 149
Pomógł: 0
Dołączył: 18.04.2004
Skąd: Z nikąd

Ostrzeżenie: (30%)
XX---


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!

Ten post edytował koskitos 28.09.2006, 14:38:16


--------------------
kOskiToS :D
Go to the top of the page
+Quote Post
SongoQ
post 28.09.2006, 15:44:25
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Mozesz pokazac na konkretnym przykladzie bo nie zrozumialem czy chodzi Ci o left join czy jeszcze inne rzeczy.


--------------------
Go to the top of the page
+Quote Post
koskitos
post 4.10.2006, 16:10:55
Post #5





Grupa: Zarejestrowani
Postów: 149
Pomógł: 0
Dołączył: 18.04.2004
Skąd: Z nikąd

Ostrzeżenie: (30%)
XX---


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!

Ten post edytował koskitos 4.10.2006, 16:11:20


--------------------
kOskiToS :D
Go to the top of the page
+Quote Post
thornag
post 4.10.2006, 16:20:59
Post #6





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

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


  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


Ten post edytował thornag 4.10.2006, 16:36:37


--------------------
"Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"

Go to the top of the page
+Quote Post
koskitos
post 4.10.2006, 16:31:44
Post #7





Grupa: Zarejestrowani
Postów: 149
Pomógł: 0
Dołączył: 18.04.2004
Skąd: Z nikąd

Ostrzeżenie: (30%)
XX---


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łą.


--------------------
kOskiToS :D
Go to the top of the page
+Quote Post
thornag
post 4.10.2006, 16:37:38
Post #8





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

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


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


--------------------
"Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"

Go to the top of the page
+Quote Post
koskitos
post 4.10.2006, 16:45:00
Post #9





Grupa: Zarejestrowani
Postów: 149
Pomógł: 0
Dołączył: 18.04.2004
Skąd: Z nikąd

Ostrzeżenie: (30%)
XX---


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.


--------------------
kOskiToS :D
Go to the top of the page
+Quote Post
siemakuba
post 4.10.2006, 16:48:47
Post #10





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

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


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.
Go to the top of the page
+Quote Post
koskitos
post 4.10.2006, 16:54:05
Post #11





Grupa: Zarejestrowani
Postów: 149
Pomógł: 0
Dołączył: 18.04.2004
Skąd: Z nikąd

Ostrzeżenie: (30%)
XX---


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. :/

Ten post edytował koskitos 4.10.2006, 16:57:25


--------------------
kOskiToS :D
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: 21.06.2025 - 03:20