Autor Zpráva
pmasarik
Profil
Potrebujem urobiť niečo také, aby správca stránky mohol vkladat nekonecne veľa textov do napísaných textov. Niečo som už urobil, ale nastal problém pri výbere z DB a to ten že pre kazdé zanorenie musím napísať nový mysql_query

Tu je ukážka scriptu http://ukazka.kompava.sk/index.php

Problém spočíva v tom, že neviem akú štruktúru má mať DB a ako vytahovat stromovú štruktúru z DB tak aby to mohlo byť teoreticky donekonečna.

Teraz mám takúto DB.


CREATE TABLE `texty` (
`text_id` int(11) unsigned NOT NULL auto_increment,
`lang` varchar(4) collate utf8_unicode_ci NOT NULL,
`seo` varchar(255) collate utf8_unicode_ci NOT NULL,
`menu_id` int(11) unsigned NOT NULL default '0',
`podmenu_id` int(11) unsigned default '0',
`text` int(11) unsigned default '0', //sem sa zapisuje v ktorom texte je vložený tento text
`obsah` text collate utf8_unicode_ci,
`nadpis` varchar(255) collate utf8_unicode_ci default NULL,
`title` varchar(255) collate utf8_unicode_ci default 'Popisok',
`zobrazit` enum('ano','nie') collate utf8_unicode_ci default 'ano',
PRIMARY KEY (`text_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


A takto to ťahám z DB, je to okresané len na pochopenie


<?php
//text pre menu
$sql = "SELECT * FROM texty WHERE lang='".$jazyk."' AND podmenu_id=0 AND text=0 ORDER BY text_id ASC";
$result = mysql_query($sql);
while ($t = mysql_fetch_assoc($result)) {//zobrazim text pre menu
echo '
<tr bgcolor="#3CABEB">
<td>'.$t['text_id'].'</td>
</tr>'."\n";
// text pre podmenu
$sql2 = "SELECT * FROM texty WHERE lang='".$jazyk."' AND menu_id=".$t['menu_id']." AND podmenu_id!=0 AND text=0 ORDER BY text_id ASC";
$result2 = mysql_query($sql2);
while ($t2 = mysql_fetch_assoc($result2)) {//zobrazim text pre podmenu
echo '
<tr bgcolor="#71EB3C">
<td>'.$t2['text_id'].'</td>
</tr>'."\n";
//zobrazim texty v podmenu textoch
$sql3 = "SELECT * FROM texty WHERE lang='".$jazyk."' AND menu_id=".$t['menu_id']." AND podmenu_id=".$t2['podmenu_id']." AND text=".$t2['text_id']." ORDER BY text_id ASC";
$result3 = mysql_query($sql3);
while ($t3 = mysql_fetch_assoc($result3)) {//zobrazim texty v podmenu textoch
echo '
<tr bgcolor="#ABFA88">
<td>'.$t3['text_id'].'</td>
</tr>'."\n";
//zobrazim texty v textoch
$sql4 = "SELECT * FROM texty WHERE lang='".$jazyk."' AND menu_id=".$t['menu_id']." AND podmenu_id=".$t2['podmenu_id']." AND text=".$t3['text_id']." ORDER BY text_id ASC";
$result4 = mysql_query($sql4);
while ($t4 = mysql_fetch_assoc($result4)) {//zobrazim texty v textoch
echo '
<tr bgcolor="#DAFFC9">
<td>'.$t4['text_id'].'</td>
</tr>'."\n";
//zobrazim texty v textoch
$sql5 = "SELECT * FROM texty WHERE lang='".$jazyk."' AND menu_id=".$t['menu_id']." AND podmenu_id=".$t2['podmenu_id']." AND text=".$t4['text_id']." ORDER BY text_id ASC";
$result5 = mysql_query($sql5);
while ($t5 = mysql_fetch_assoc($result5)) {//zobrazim texty v textoch
echo '
<tr bgcolor="#F3FFEE">
<td>'.$t5['text_id'].'</td>
</tr>'."\n";
}//while texty v textoch
}//while texty v textoch
}//while texty v podmenu textoch
}//while text pre podmenu
}//while text pre menu


Ešte je tabulka pre menu a podmenu, ale to nemá význam ukazovať.
Snáď sa nájde niekto kto poradí prípadne odkáže na nejaký článok.
Ak by som popredu vedel že zanorení bude len 5 tak toto je funkčné riešenie, ale ja to chcem urobiť univerzálnejšie.
Jean
Profil
Co takhle rekurzni volani funkce?
Toto téma je uzamčeno. Odpověď nelze zaslat.

0