Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Kasowanie rekordów z drugiej tabeli, pola id uzależnione od pierwszej tabeli
L_Devil
post 12.04.2006, 17:44:29
Post #1





Grupa: Zarejestrowani
Postów: 195
Pomógł: 0
Dołączył: 13.04.2004
Skąd: Łódź

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


Witam!

Mam dwie tabele:

Kod
TABELA 1
+-------+-----------+----------+----------+
|  id   |   owner   |   name   |   value  |
+-------+-----------+----------+----------+
|  1    |    1      |  obrazek | obraz.jpg|
|  2    |    1      |  atrybut | jpeg     |
|  3    |    1      |  costam  | wartosc  |
|  4    |    2      | rekord   | wartosc  |
+-------+-----------+----------+----------+

TABELA 2
+-------+-----------+----------+----------+
|  id   |   owner   |   name   |   value  |
+-------+-----------+----------+----------+
|  1    |    1      |  obrazek | obraz.jpg|
|  2    |    1      |  atrybut | jpeg     |
|  3    |    2      |  costam  | wartosc  |
|  4    |    3      | rekord   | wartosc  |
|  5    |    4      | rekord2  | wartosc2 |
+-------+-----------+----------+----------+
Chcę teraz usunąć rekordy z obu tabeli, ale uwaga: Chcę usunąć wszystkie wpisy z pierwszej tabeli dla konkretnej wartości pola owner i wszystkie wpisy z drugiej tabeli, której owner jest identyczny z przynajmniej jednym z id z kasowanych rekordów. Brzmi to trochę zagmatwanie, więc wyjaśnimy sytuację:

Kasuję rekordy o owner = 1:
Z pierwszej tabeli wylatują rekordy o id 1, 2, 3
Z drugiej tabeli wylatują rekordy o polu owner równym 1, 2, 3 (=wartości skasowanych id z pierwszej tabeli) - czyli pola o id 1, 2, 3, 4
W sumie kasuję 7 rekordów z dwóch tabel

O ile usuwanie z pierwszej tabeli to banał - polecenie
  1. DELETE
  2. FROM tabela1
  3. WHERE owner=1
i po problemie. Ale z jednoczesnym kasowaniem z drugiej tabeli nie umiem sobie poradzić


--------------------
Językiem którym najlepiej operują wszyscy programiści są przekleństwa.
Go to the top of the page
+Quote Post
NuLL
post 12.04.2006, 18:31:37
Post #2





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


Jaki masz serwer baz danych moze bys napisal :?:


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
L_Devil
post 12.04.2006, 18:36:57
Post #3





Grupa: Zarejestrowani
Postów: 195
Pomógł: 0
Dołączył: 13.04.2004
Skąd: Łódź

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


MySQL smile.gif


--------------------
Językiem którym najlepiej operują wszyscy programiści są przekleństwa.
Go to the top of the page
+Quote Post
DeyV
post 12.04.2006, 21:45:25
Post #4





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




wersja?

Jeśli 5 - to chyba możesz skorzystać z trigerów, jeśli starsza - czy to nie czas na przesiadkę na Postgresa?


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
phobos
post 13.04.2006, 00:30:47
Post #5





Grupa: Zarejestrowani
Postów: 91
Pomógł: 0
Dołączył: 7.04.2006

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


  1. DELETE tabela1, tabela2
  2. FROM tabela1,
  3. tabela2 WHERE tabela1.owner=1 AND tabela2.owner=tabela1.id;

albo
  1. DELETE
  2. FROM tabela1,
  3. tabela2 USING tabela1, tabela2 WHERE tabela1.owner=1 AND tabela2.owner=tabela1.id

2 dziala na 100% a pierwsze nie wiem bo nie urzywam czesto tongue.gif
Go to the top of the page
+Quote Post
L_Devil
post 13.04.2006, 11:16:51
Post #6





Grupa: Zarejestrowani
Postów: 195
Pomógł: 0
Dołączył: 13.04.2004
Skąd: Łódź

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


Niestety 4.1 - a co do przesiadki mam bardzo ograniczone możliwości w tym względzie

Oba przykłady działają, ALE działają tylko dla rekordów które mają przynajmniej 1 odpowiednik w drugiej tabeli. Tymczasem część rekordów z pierwszej nie ma takich odpowiednich rekordów - wtedy dane z nich nie są kasowane


--------------------
Językiem którym najlepiej operują wszyscy programiści są przekleństwa.
Go to the top of the page
+Quote Post
phobos
post 13.04.2006, 11:45:56
Post #7





Grupa: Zarejestrowani
Postów: 91
Pomógł: 0
Dołączył: 7.04.2006

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


mozesz zrobic jeszcze tak
  1. DELETE
  2. FROM tabela1
  3. WHERE owner=1;
  4. DELETE
  5. FROM tabela2
  6. USING tabela1, tabela2 WHERE tabela2.owner!=tabela1.id;

ALE
musisz miec kazdy odpowiednik id z tabeli1 w tabeli2 w polu owner bo inaczej :
jak masz w tabeli2 pole owner=8 i nie bedziesz mial w tabeli1 id=8 to to tez usunie
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: 19.07.2025 - 19:17