Autor Zpráva
23k
Profil
Hoj.

Problem. V DB si vytvorim tabulku podobnou teto

pageID | parrentID | stranka.php | nazev_odkazu


kazda stranka patri do sve kategorie (parrentID)

takze existuje nco takoveho

1 | 100 | stranka1.php | informace
2 | 100 | stranka2.php | kontakt
3 | 300 | stranka3.php | reference


to zatim neni problem ....

ale pak si vytvorim vlastne jeste stranky kategorie

cili

100 | NULL | kategorie1.php | kategorie1
200 | NULL | kategorie2.php | kategorie2
300 | NULL | kategorie3.php | kategorie3


Problem je v tom ze po vytvoreni techto 3 a vice hlavnich kategorii pod ktere se budou clenit jednotlive stranky se autoincrement zvysuje od cisla 300 ...tj posledne vlozene stranky.

Takze chci vlozit stranku treba vysledky.php , zaradit ji do kategorie 200 a ID stranky bude 301 ...coz se mi tedy moc nelibi... Schvalne jsem dal kategoriim vysoka cisla abych je odlisil od beznych stranek... tech bude tak 40-50 ...


takze to potrebuju nejak zachovat aby se pri dalsim vlozeni nejake stranky pokracovalo od nizsiho cisla ...kde sem prestal. a ne od posledniho vysokeho cisla kategorie.

Nevite jak?

Samozrejme muzu pouzit 2 tabulky (stranky a kategorie) ...ale to se mi nechce.

DIKY:)
Hugo
Profil
Nejlepsi to bude rozclenit podle kategorii, jinak budes muset ID generovat rucne (zjistit nejvyssi aktualni a zvetsit ho o jednicku).
23k
Profil
jak je to mineno?
Hugo
Profil
Pokud myslis rozcleneni, tak udelas nekolik stejnych tabulek a budes to tam rvat podle kategorii.

Jinak budes muset z tabulky zjistit nejvyssi ID pro danou kategorii a pri vkladani noveho radku, ho jen inkrementujes. Toto ma ale hodne nevyhod - max. 100 polozek v dane kategorii, muze dojit ke kolizi pri odeslani dvou dotazu ve stejnou dobu atd.

Rozhodne bude lepsi udelat vic tabulek.
llook
Profil
Proč musí mít kategorie tak vysoký číslo? Že nejde o stránku ale kategorii je přece zřejmé z toho NULLu, buďto bych to udělal takhle:

1 | 4 | stranka1.php | informace
2 | 4 | stranka2.php | kontakt
3 | 6 | stranka3.php | reference
4 | NULL | kategorie1.php | kategorie1
5 | NULL | kategorie2.php | kategorie2
6 | NULL | kategorie3.php | kategorie3

A nebo dvě tabulky.
printf
Profil
Schvalne jsem dal kategoriim vysoka cisla abych je odlisil od beznych stranek
Osobně bych byl proti tomu označení 100, 200, 300... to přece není nutné, kategorii dostatečně odlišuje že nemá předka parentID, ten tvůj postup je podle mně proti zvyklostem přidělování ID. Stejně se v tom bude hrabat nějaký script a tomu je jedno jestli je tam 1 nebo 100.
Z principu bych také nespoléhal na to, že stránek v kategorii bude 40-50. No ale jestli na tom trváš, tak to budeš muset incrementovat ručně.
Dvě tabulky by asi byly úplně nejlepší, ale tenhle postup s jednou tabulkou zase dává možnost neomezeného vnořování dalších podkategorií.

Ještě mě napadlo: pokud ty kategorie budou jednou dané a nebudou se měnit (často), nebylo by špatné je dát do pole, indexovaného sloupcem parentID, pak bys nemusel zbytečně obtěžovat databázi při každém načtení stránky.
Leo
Profil
Pokud jde o ulozeni hierarchicke struktury webu, pak nejspis jedna tabulka, a s ID se vubec nezalamujte, urovne zanoreni jak uz nekdo psal vam postihuje ten parentID sloupec. Leo
23k
Profil
tak nak se tady behem prace odbiham ke skriptum a zkousim si to ...
a stale mi to jaxi nevychazi ....

nejdriv vytaham v 1. cyklu stranky kde kategorie = NULL a tim dostanu seznam kategorii.
Pak v 2 cyklu ktery je vne 1 je dalsi select ktery taha stranky kde parentID = cislo ktere jsme dostali 1 selectem...ale nak mi to blbne

Jak to ma byt?

Mozna to bude chtit vic casu a zkouseni, tj. az doma... ;)
Leo
Profil
A co se vlastne snazite z te dababaze ted dostat? Leo
23k
Profil
www.eurodesk.cz melo by to fungovat takto ..jako rozklivaci seznam.... mam opet sve obdobi kdyz mi funguje pouze ECHO ...

<?

mysql_connect("localhost", "", "");
mysql_select_db("test");

// vybereme hlavni kategorie
$sql=mysql_query("select * from pages where parrentID is NULL");
while($r=mysql_fetch_array($sql))
{
echo "<a href='$r[pageID]'>$r[nazev_odkazu]</a> <br/>";

// vybere prislusne stranky spadajici do kategorie
$sql2=mysql_query("select * from pages where parrentID='$r[0]'");
while($r=mysql_fetch_array($sql2))
{
echo "<a href='$r[pageID]'>$r[nazev_odkazu]</a> <br/>";
} //konec vnoreneho while
} // konec prvniho WHILE





/*
pageID parrentID nazev_stranky nazev_odkazu
Upravit Smazat 001 100 prvni.php prvni
Upravit Smazat 002 100 druha.php druhy
Upravit Smazat 003 100 treti.php treti
Upravit Smazat 004 200 ctvrta.php ctrta
Upravit Smazat 005 200 pata.php pata
Upravit Smazat 006 255 sesta.php sesta
Upravit Smazat 007 255 sedma.php sedma
Upravit Smazat 255 NULL parrent3.php parrent3
Upravit Smazat 200 NULL parrent2.php parrent2
Upravit Smazat 100 NULL parrent1.php parrent1

*/

parrent3
sesta
sedma
parrent2
ctrta
pata
parrent1
prvni
druhy
treti




Takhle mi vyjede vse... ale stranky z kategorii maji jen vyjet po kliknuti na hlavni kateg....

Premyslim jak na to ... a nic krom pripojeni kategorie do URL jako druhy parametr me nenapada..jeste do session ukladat na jakou kategorii klikl clovek ...

Sry za blby dotazy, cim se do php ponoruju vic tim ho vic neumim
23k
Profil
$sql=mysql_query("select * from pages where parrentID is NULL");
while($r=mysql_fetch_array($sql))
{
echo "<a href='?pid=$r[pageID]'>$r[nazev_odkazu]</a> <br/>";

if ($pid)
{
// vybere prislusne stranky spadajici do kategorie
$sql2=mysql_query("select * from pages where parrentID='$pid]'");

while($r=mysql_fetch_array($sql2))
{
echo "&nbsp;&nbsp;&nbsp;&nbsp;<a href='?pid=$r[pageID]'>$r[nazev_odkazu]</a> <br/>";
} //konec vnoreneho while

}

} // konec prvniho WHILE



Tak a ted to vypisuje dost blbe. Vzdy to vypise odkazy kategorie do ktere patri a ty same doplni do ostatnich.. :/ ...
printf
Profil
viděl bych to takhle (jestli jsem to spletl, tak se omlouvám)

$sql=mysql_query("select * from pages where parrentID is NULL");
while($r=mysql_fetch_array($sql))
{
echo "<a href='?pid=$r[pageID]'>$r[nazev_odkazu]</a> <br/>";

if ($r[pageID]==$pid)
{
// vybere prislusne stranky spadajici do kategorie
$sql2=mysql_query("select * from pages where parrentID='$pid]'");

while($r=mysql_fetch_array($sql2))
{
echo "&nbsp;&nbsp;&nbsp;&nbsp;<a href='?pid=$r[pageID]'>$r[nazev_odkazu]</a> <br/>";
} //konec vnoreneho while

}

} // konec prvniho WHILE
printf
Profil
btw: pokud vím, tak indexy asociativních polí se mají psát do uvozovek $r["pageID"],
případně echo "<a href='?pid={$r["pageID"]}'>$r[nazev_odkazu]</a>
23k
Profil
heh supa :P .... chjo muj mozek je fakt smejd dix ... vecer jeste musim nakym zpusobem vymyslet aby se to menicko nezavrelo kdyz kliknu na odkaz ... protoze ted to prebira pouze z kategorii ...
printf
Profil
předpokládám že to pid slouží jen pro rozbalení příslušného menu. Potom bych tedy do toho vnitřního cyklu odkazoval jako pid to parrentID a taky bych raději ten vnitřní result $r pojmenoval jinak než vnější, třeba $r2:

while($r2=mysql_fetch_array($sql2))
{
echo "&nbsp;&nbsp;&nbsp;&nbsp;<a href='?pid=$r2[parrentID]'>$r2[nazev_odkazu]</a> <br/>";
} //konec vnoreneho while

nebo (za předpokladu že vnitřní result bude $r2 a vnější $r)

while($r2=mysql_fetch_array($sql2))
{
echo "&nbsp;&nbsp;&nbsp;&nbsp;<a href='?pid=$r[pageID]'>$r2[nazev_odkazu]</a> <br/>";
} //konec vnoreneho while
23k
Profil
add druhe reseni) toto nefunguje ... odkazy z dane kategorie ted smeruji vlastne na kategorie

kategorie1
karegorie2
karegorie3 (tato je dejme tomu rozbalena)
odkaz1 ? = a ma PID stejne jako kategorie 3 ..coz je trosku nesmysl.

a to prvni dela to same...

Ocenuji tvoji snahu! Mozna je ta tabulka blbe navrhnuta ... Nemas ICQ?


****
Da se to jistym zpusobem vyresit pres druhou promennou v url ze to pak bude

?pid=200&stranka=005 treba ... (prvni je kategorie, druha stranka).... coz sem ale nechtel :/

navic do stredu webu kam se to bude INCLUDOVAT se maji vkladat jak jednotlive stranky tak i kategorie

no uvidim co vymyslim ..ted mazu z worku
krteczek
Profil
tak skus šifrovat:-)
kategorie:kombinace pismen treba kategorie1=="AA", kategorie2=="AB"... tohle mužeš hodit i do sloupce ParentID
if ( ($neco['parent_id']*1)>0)
{
//je to číslo
}
clanky jsou čísla od 1 donekonecna :-)
<a href="index.php?clanek=AA123">blabla</a>

,máš jednu pproměnnou, jen si to musíš rozparsovat
krteczek
krteczek
Profil
jinak asi myslíš něco takového: http://www.krteczek.czweb.org/zaneta/?sekce_clanku=2
zatím je to ve vývoji, na to aby se menu nezavřelo je nutno použít cookies
krteczek
printf
Profil
no já jsem to myslel trochu jinak. Když vyberu něco v menu, tak se odkáže na konkrétní stránku a ta už přeci nepotřebuje vědět jaké má id. Proto bych to pid využil na předávání parentID a ne pageID, tudíž pid by nebylo určeno pro danou kategorii ale jen pro menu aby vědělo v jaké kategorii se má otevřít. Pokud uživatel klikne na název kategorie, předá se pageID té kategorie, což je zároveň parent ID podkategorií a když klikne na podkategorii, zůstane v pid její parentID, takže příslušná kategorie zůstane otevřená. O to doufám jde :-)
23k
Profil
;) uz sem to vyresil trosku jinak ..ale diky za pomoc !:) btw nebude to narocne na mysql takoveto MENU?
printf
Profil
takhle se to velmi často řeší, nakonec od toho databáze jsou :-) Přesto se vždycky snažím aby dotazů na databázi bylo minimum a pokud náhodou databáze někdy selže aby tím neselhal celý web a aspoň něco bylo vidět.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0