Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Usuwanie wszystkich dzieci jeżeli rodzic nieaktywny
Forum PHP.pl > Forum > PHP
Largo
Witam,

Mam pewien kłopot, a już nie mam pomysłu jak to zrobić. Mam rekordy z bazy danych, które mają strukturę:

  1. CREATE TABLE IF NOT EXISTS `dh_segment` (
  2. `id` varchar(255) NOT NULL,
  3. `name` varchar(255) DEFAULT NULL,
  4. `provider_id` int(10) DEFAULT NULL,
  5. `provider_name` varchar(255) DEFAULT NULL,
  6. `count` int(10) DEFAULT NULL,
  7. `price` int(10) DEFAULT NULL,
  8. `billing_type` int(10) DEFAULT NULL,
  9. `start_date` varchar(255) DEFAULT NULL,
  10. `end_date` varchar(255) DEFAULT NULL,
  11. `is_visible` int(10) DEFAULT NULL,
  12. `is_deleted` int(10) DEFAULT NULL,
  13. `created_at` varchar(255) DEFAULT NULL,
  14. `updated_by` int(10) DEFAULT NULL,
  15. `updated_at` varchar(255) DEFAULT NULL,
  16. `parent_id` varchar(255) DEFAULT NULL,
  17. PRIMARY KEY (`id`)
  18. ) ENGINE=MEMORY;


parent_id to ID rodzica, dla głównych jest to null, w innym wypadku jest to ID elementu nadrzędnego. Jeżeli rodzic, któregoś z elementu jest wyłączony to ma wszystkie pod nim dzieci wyłączyć lub usunąć z listy. Jak się za to zabrać? Byłbym zobowiązany za pomoc.

Pozdrawiam,
Largo
Tomplus
Nie wiem czy dobrze, ale sprawdzałeś takie zapytanie?


Kod
SELECT * FROM `dh_segment` dh
WHERE id = :idElementu AND is_visible = 1 AND
(SELECT is_visible FROM `dh_segment` WHERE parent_id = 0 AND id = dh.parent_id) = 1


U mnie to działa na postaci:

Kod
SELECT * FROM `element` e WHERE e.visible=1 AND e.id=8 AND
(SELECT visible FROM `element` WHERE visible=1 AND id = e.parent ) = 1


  1. id name parent visible
  2. 1 Alfa 0 1
  3. 2 Beta 0 0
  4. 3 Gama 1 1
  5. 4 Delta 2 1
  6. 5 Teta 0 1
  7. 6 Zeta 5 1
  8. 7 Pi 2 1
  9. 8 Lambda 5 1
  10. 9 Peta 5 1
  11. 10 Fi 1 1


i wyświetla te elementy których rodzice są visible=1 a nie wyświetla tych których rodzice mają visible = 0
luck
Jeśli rekordy potomne faktycznie mają również być aktualizowane, to do tego użyłbym trigger ON UPDATE założony na tabelę, który zadba o automatyczne włączanie/wyłączanie potomków dla danego rodzica. Dobre na wypadek, gdyby dane z bazy pobierał inny system, na którego zapytania nie masz żadnego wpływu.
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.