Hei!
Olen rakentamassa PHP:llä puumaista kansiorakennetta, mutta jo toisen kansion jälkeen minulla iski tenkkapoo. Muutaman päivän, muutamaan otteeseen olen miettinyt miten olisi järkevintä rakentaa tietokanta. No muutaman kokeilun ja epäonnistuneen tuloksen jälkeen tulin siihen ratkaisuun, että tein sen näin.
juuri, data1, data2, data3, data4, data5
(rajoittaa viiteen alihakemistoon, mutta menkööt)
data kentissä on seuraavanlaisesti.
Juuren nimi, kansio|kansio|kansio, kansio||, ||kansio,|||,|||
Eli data(x) kentissä halutut kansiot ja niiden alikansiot ja niiden alikansiot erotellaan | merkeillä.
Tuntui jossain vaiheessa hyvältä, ei enää. Riippuu miten saatte minua autettua :)
class Tree{ public function __construct(){} public function CreateTree(){ $k = "SELECT t.juuri as juuritaso, t.juuri_id FROM tree as t WHERE poistettu IS NULL"; if(!$t = mysql_query($k)){ return; } // Aloitetaan listaelementin rakentaminen print '<ul id="browser" class="filetree">'; // Käydään silmukassa läpi, mitä alihakemistoja juuritasoon kuuluu. while($r = mysql_fetch_assoc($t)){ print "\n"; // Luodaan juuritason listaelementti print '<li><span class="folder"> '. htmlspecialchars($r['juuritaso']) .'</span>'; $juuriTaso = intval($r['juuri_id']); // Luodaan kysely, jolla haetaan juuren alikansiot yms.. $q = "SELECT branch_id,branch, taso, t1,t2,t3,t4,t5, folder FROM branch WHERE union_id = $juuriTaso"; if(!$r = mysql_query($q)){ print mysql_error(); } while($res = mysql_fetch_assoc($r)){ if(!empty($res['branch'])){ print '<ul><li>'; print "\n"; print '<span class="folder"> '. htmlspecialchars($res['branch']) .'</span>'; if(!empty($res['t1'])){ $kansiot = explode("|", $res['t1']); foreach ($kansiot as $kansio) { print '<ul><li>'; print "\n"; print '<span class="folder"> '. $kansio .'</span>'; $k2 = explode("|", $res['t2']); foreach($k2 as $kansio2){ if(!empty($kansio2)){ print '<ul><li>'; print "\n"; print '<span class="folder"> '. $kansio2 .'</span>'; print "\n"; print '</li></ul>'; } } print "\n"; print '</li></ul>'; } } print "\n"; print '</li></ul>'; print "\n"; } } // Suljetaan juuritason listaelementti print '</li>'; } print '</ul>'; print '</div>'; } } ?>
ps. jos ihan tarkkoja ollaan niin juuri haetaan tyhmästi omasta kannastaan, mutta ei puututa muotoseikkoihin.
Anyway.. Miten saan haettua nyt oikeiden alikansioiden alle halutut alikansiot jne.. Mietin myös taulukkoratkaisua, mutta sekään ei oikein meinannut onnistua.
Kiitos ja kumarrus!
Ja toivontaa, että joku ymmärsi mitä selitän :)
Juuren nimi, kansio1|kansio2|kansio3, kansio4,kansio6,kansio7||, kansio5||,|||,|||
<pre> Juuri kansio1 kansio4 kansio5 kansio6 kansio7 kansio2 kansio3 </pre>
Suurin piirtein nuin pitäisi mennä. Millä tavalla tietokanta tulisi rakentaa, jotta tämä olisi helpoin ja järkevin toteuttaa.
manninen kirjoitti:
Millä tavalla tietokanta tulisi rakentaa, jotta tämä olisi helpoin ja järkevin toteuttaa.
Tietokantaan kansiolle parent_id joka on vierasavain isäkansioon. Eli esim:
id name parent_id 1 isäkansio null 2 lapsikansio 1
Koodin puolella avainsana on "rekursio".
Vaihtoehtoinen, ehkä vähän vaikeampi, tapa rakentaa tietokanta: http://www.sitepoint.com/hierarchical-data-database-2/
samip:n rakenteelle täältä ääni.
Se on yksinkertainen ja ei virhealtis. Voit halutessasi siirtää yhden päätason toisen alle yhden rivin parent_id:ä muuttamalla, ja homma toimii silti suoraan.
Aihe on jo aika vanha, joten et voi enää vastata siihen.