nasıl düzenleneceğini / php çok katmanlı koşullu verileri yönetmek

2 Cevap php

Ben yönetmek / eklemek / düzenlemek için gereken bir mysql veritabanında 4 tablolar var.

Zorluk, her biri, daha önce bir bağımlı olmasıdır.

The way i have this setup on the user end, is you select an option from table 1. You are then presented with the options in table 2, that have the first option's ID in their row. Once you select option in table 2, you are taken to table 3, which generates its list where the rows contain the ID of your selection in table 2, and so on and so forth.

Sorun bu yönetmek / düzenlemek için nasıl.

Eğer tablo 1'de bir seçenek silerseniz Açıkçası, tüm sonraki alt seçenekler geçersiz olacaktır.

Ben sadece bu gibi bir kurulum yönetmek için nasıl bir fikir gerekir.

2 Cevap

Pek çok ayrıntı olmadan bu kesin durumu hakkında yorum yapmak zor, ama burada MySQL veritabanı yapısını düzenlemek için bir yol:

TABLE table1
  INT id
  ... other data ...

TABLE table2
  INT id
  INT table1_id FOREIGN_KEY table1
  ... other data ...

TABLE table3
  INT id
  INT table2_id FOREIGN_KEY table2
  ... other data ...

TABLE table4
  INT id
  INT table3_id FOREIGN_KEY table3
  ... other data ...

Ve siteniz için url yapısı olabilir:

/table1/add
/table2/add?table1_id=T1_ID
/table3/add?table2_id=T2_ID
/table4/add?table3_id=T3_ID
/table1/(edit,delete)/T1_ID
/table2/(edit,delete)/T2_ID
/table3/(edit,delete)/T3_ID
/table4/(edit,delete)/T4_ID

Table2, 3,4 ekleyerek için:

INSERT INTO table2 (data, table1_id) VALUES(data, T1_ID);

Tablo1 silmek için:

DELETE FROM table1 WHERE id = T1_ID;
$t2_ids = SELECT id FROM table2 WHERE table1_id = T1_ID;
DELETE FROM table2 WHERE table1_id = T1_ID;
$t3_ids = SELECT id FROM table3 WHERE table2_id IN ($t2_ids);
DELETE FROM table3 WHERE table2_id = $t2_ids;
$t4_ids = SELECT id FROM table4 WHERE table3_id IN ($t3_ids);
DELETE FROM table4 WHERE table3_id = $t3_ids;

Ve böylece ve benzeri Eğer alt tablolardan silme eğer.

Her tabloda veri çok farklı değilse Ayrıca, size ebeveyn / çocuk ilişkileri korumak için tek bir tablo kullanabilirsiniz

TABLE table
INT id
INT parent_id
... other data ...

URL yapısı fazla bir değişiklik olmaz, ancak silme pseudo-code tablonun kendisi üzerinde subselects kullanmak için optimize edilebilir.

Bir tablodaki çocuk ilişkisini alan: Çok katmanlı veri En çok sık bir ebeveyn ile saklanır.

id  | name | parent_id
----------------------
1   | Mom  | NULL
2   | Son  | 1

Ilişkileri çapraz bir özyinelemeli fonksiyon / sorgu yazmak ve herhangi bir güncelleme / ekler / siler nispeten basit olmalıdır.