Rumah > Soal Jawab > teks badan
Saya mempunyai pertanyaan MySQL yang saya gunakan dengan PHP untuk membina JSON hierarki untuk pepohon/dendrogram d3.js.
Biola untuk melihat skema dan pertanyaan sedia ada.
Saya kini berfikir tentang cara menambahkan hubungan data tambahan D antara data program_outcomeO dan data unitU dan data peringkat_pembangunan, yang merupakan hubungan banyak-ke-banyak.
Hanya ada tiga jenis D seperti gambar di bawah.
Lukisan konsep yang saya perlukan:
Setiap U hanya berkaitan dengan satu D setiap O (hanya satu O cawangan ditunjukkan untuk kejelasan).
Jadi U perlu menjadi keturunan D dan cucu O. Untuk cawangan O lain, U yang sama mungkin mempunyai jenis D yang sama atau berbeza.
Seperti yang anda lihat dalam biola, hubungan antara O dan U sedang dilaksanakan melalui jadual carian/perhubungan program_outcome_unit_lookup
.
Selain itu, adalah mungkin untuk menukar jadual carian, jadi bukannya program_outcome_unit_lookup
jadual, anda boleh mempunyai dua jadual carian, yang mungkin berfungsi:
O -> U
D -> U
Ada idea bagaimana untuk mencapai ini?
PHP selepas pertanyaan (bukan dalam biola pangkalan data...) adalah seperti berikut, tetapi mungkin tidak berkaitan dengan penyelesaian, ini pada dasarnya adalah isu pangkalan data.
$result = $connection->query($query); $data = array(); while ($row = $result->fetch_object()) { $data[$row->global_id] = $row; } $roots = array(); foreach ($data as $row) { $row->type = end(explode(",",(implode(array_slice(explode ( ':', $row->global_id), -2, 1))))); if ($row->parent_global_id === null) { $roots[]= $row; } else { $data[$row->parent_global_id]->children[] = $row; } unset($row->parent_global_id); unset($row->global_id); } $json = json_encode($roots); $json = trim($json, '[]'); $fp = fopen('data.json', 'w'); fwrite($fp, $json); fclose($fp);
Dikemas kini
Lihat gambar rajah konsep yang diperluaskan dengan dua cabang:
P粉4278776762024-03-30 12:45:05
Model anda nampaknya: setiap tuple (unik) (O, U)
都被分配了一个强制值 D
.
Anda boleh melaksanakan model ini dengan menambahkan lajur pada program_outcome_unit_lookup
表添加 D
:
CREATE TABLE `program_outcome_unit_lookup` ( `program_outcome_unit_lookup_pk` int(6) NOT NULL AUTO_INCREMENT, `program_outcome_fk` int(2) NOT NULL, `devdata_fk` int(2) NOT NULL, `unit_fk` int(2) NOT NULL, PRIMARY KEY (`program_outcome_unit_lookup_pk`), UNIQUE KEY (`program_outcome_fk`, `unit_fk`) );
(program_outcome_fk, unit_fk)
juga boleh menjadi kunci utama anda, tetapi sama ada ia mestilah unik (anda tidak menguatkuasakan kekangan ini pada masa ini).
Kini, setiap U
都可以是任意多个 O
的成员,但根据要求,“每个 U
将仅与每个 D
persatuan”.
Cth. kedai U1
(O1-D2-U1
和 O2-D1-U1
),您可以将值 ((1,2,1),(2,1, 1))
。根据要求,您还不能添加例如O2-D2-U1
daripada graf yang dikemas kini, kerana ia akan melanggar kekangan unik.
Anda juga harus menyediakan D
添加一个新表。如果不是每个 O
都允许使用每个 D
(例如,如果不允许 O2
分支使用 D1
),则还需要一个表 (O, D)
untuk