Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Usuwanie z wielu tabel
Forum PHP.pl > Forum > Bazy danych > MySQL
porowski
Czy jest jakieś bardziej efektywne usuwanie danych z wielu tabel w bazie danych questionmark.gif

np: mam tak...

jeden rekord -> wiele rekordow -> wiele rekordow

obecnie usuwam tak:

  1. <?php
  2.  
  3. $sqlPro = mysql_query('SELECT id FROM produkt_opis WHERE id_producent = 2');
  4. while($rekPro = mysql_fetch_row($sqlPro))
  5. {
  6. $sqlOp = mysql_query('SELECT id FROM produkt WHERE id_produkt_opis = ' . $rekPro[0]);
  7. while($rekOp = mysql_fetch_row($sqlOp))
  8. {
  9. $sqlIn = mysql_query('SELECT id FROM parametr_dane WHERE id_produkt = ' . $rekOp[0]);
  10. while($rekIn = mysql_fetch_row($sqlIn))
  11. {
  12. mysql_query('DELETE FROM parametr_dane WHERE id = ' . $rekIn[0]);
  13. }
  14. mysql_query('DELETE FROM produkt WHERE id = ' . $rekOp[0]);
  15. }
  16. }
  17. ?>
nospor
  1. <?php
  2. $sqlIn = mysql_query('SELECT id FROM parametr_dane WHERE id_produkt = ' . $rekOp[0]);
  3. while($rekIn = mysql_fetch_row($sqlIn))
  4. {
  5. mysql_query('DELETE FROM parametr_dane WHERE id = ' . $rekIn[0]);
  6. }
  7. ?>

blink.gif a czemu tak? To jest rownoważne temu:
  1. <?php
  2.  mysql_query('DELETE FROM parametr_dane WHERE id_produkt = ' . $rekOp[0]);
  3. ?>

Podobnie drugi select.

Proponuję ci zrobic z tych tabel type InnoDB, pozakladać klucze obce oraz relacje i powiedziec że przy usuwaniu ma być cascade. Wowczas kasujesz jeden rekord z jednej tabeli, a wszystkie inne rekordy z innych tabel powiązane z nim, również zostaną skasowane. Ty już nie będziesz musial sie tym martwic.

ps: przenoszę na bazki
porowski
mam tylko takie opcje dostępne i nic nie mogę zmienić:

php w wersji 4.3.11 lub 5.0.5 (do wyboru)
MySQL w wersji 4.1.13a (niestety bez InnoDB)
PostgreSQL w wersji 7.4.6 (tej bazy niestety nie znam)

P.S.
może ktoś ma dobre linki, pdf, e-booki, itp... apropo PostgreSQL tylko NIE po angielsku exclamation.gif bo z tego co mi wiadomo ma PostgreSQL ma wieksze możliwości od MySQL
nospor
Cytat
MySQL w wersji 4.1.13a (niestety bez InnoDB)
W tej wersji jest InnoDB winksmiley.jpg

No ale pozmieniaj te zapytania co ci napisalem. To juz bedzie duza poprawa wydajności
porowski
może i jest w tej wersji ale jest zablokowane - juz sie kontaktowalem z adminem i niestety nie ma mozliwosci odblokowania nawet odplatnie...

no napewno pozmieniam... fakt małe przeoczenie... z góry dzięki smile.gif



przypominam, że zalezy mi na tym PostgreSQL - jak najwiecej info smile.gif
SongoQ
  1. DELETE
  2. FROM parametr_dane
  3. WHERE id IN (SELECT id
  4. FROM parametr_dane
  5. WHERE id_produkt = wartosc)
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.