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:
Model anda nampaknya: setiap tuple (unik)
(O, U)
都被分配了一个强制值D
.Anda boleh melaksanakan model ini dengan menambahkan lajur pada
program_outcome_unit_lookup
表添加D
:(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
, jika tidak, ia tidak perlu. 🎜D
添加一个新表。如果不是每个O
都允许使用每个D
(例如,如果不允许O2
分支使用D1
),则还需要一个表(O, D)
untuk