Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php][mysql] Pętla usuwająca dane z bazy
cadavre
post
Post #1





Grupa: Zarejestrowani
Postów: 472
Pomógł: 7
Dołączył: 7.12.2005
Skąd: Gliwice

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


Struktura:
(IMG:http://cadavre.pl/images/wykres.jpg)

Objaśnienia:
1. Wykres. Przedstawia on strukturę przynależności elementów do działów. "idX" to nazwa elementu. Podkreślona nazwa elementu to dział.
2. Tabela.
ID - auto_increment'owany id elementu
BELONGS - określa, do którego ID'u (będącego działem) należy element
DZIAL - przjmuje wartości 1 i 0 (prawda/fałsz). Jeśli 1 - element jest działem
NAZWA - wiadomo...


Co potrzebuję:
Aby znając jeden ID (w tym przypadku np. 1) usunąć wszystkie wpisy, które są z nim powiązane. Czyli by usunąć całość ID=1 - trzeba usunąć działy ID=3 oraz ID=6 oraz ich elementy. Przy okazji potrzebuję odczytać wartość "FILE" (nie narysowałem w tabeli) dla każdego z usuwanych ID'ów.

Próbowałem całość obsłużyć pętlą, ale nie bardzo mam pomysł jak to zrobić. Coś takiego naskubałem:
  1. <?php
  2. $i=0;
  3. do {
  4. $sqlI = "SELECT `id` FROM `menu` WHERE `belongs`='$id'";
  5. $queryI = mysql_query($sqlI);
  6. while ($row = mysql_fetch_row($queryI)) {
  7. $eidy[] = $row[0];
  8. $i++;
  9. }
  10. (...)
  11. ?>

W ten sposób mam w tablicy $eidy, IDy działów, które są w pierwszej kolejności poddziałami. $i zawiera ile ID'ów zostało zapisanych (w celu wykonania pętli). Następnie trzeba wykonać identyczną pętlę by odczytać czy ID'y z tablicy $eidy nie mają w sobie jeszcze jakichś poddziałów.

ID'y wszystkich działów potrzebuję mieć w tablicy (np. jak tutaj $eidy).

Jakieś pomysły? (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował cadavre 27.08.2006, 17:59:57
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
mike
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Ludzie, ludzie a po co to wszystko.
Przecież to można zrobić wywołując tylko jedno zapytanie:
  1. DELETE FROM tabela WHERE id = x


Wystarczy zadbać trochę o konstrukcję tabeli w jakiej to się odbywa.

Załóż na pole belongs index i załóż relację z polem id a na usuwanie zareaguj kaskadowo. Wtedy jak usuniesz wiersz z id, które jest kluczem obcym dla innego rekordu, tamten zostanie również usunięty.
Potrzeba do tego tabel InnoDB
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 6.10.2025 - 01:07