Autor | Zpráva | ||
---|---|---|---|
Ivorius Profil |
#1 · Zasláno: 5. 2. 2008, 20:45:27 · Upravil/a: Ivorius
Zdravím, mám tuto funkci, která mi má na základě url vrátit ID kategorie případně FALSE pokud kategorie neexistuje
function idfromurl(){ $i=1; while (isset($_GET["category".$i])){ $castikategorie[]=$_GET["category".$i]; $i++; } $i = 1; do{ $aktualnikat = (count($castikategorie)-$i); $sql="SELECT id, nadkat, url FROM kategorie WHERE url='".$castikategorie[$aktualnikat]."'"; $vysledek = MySQL_Query($sql) or die ("Dotaz neproveden"); if(!mysql_num_rows($vysledek)) { //Neexistuje kategorie $return = FALSE; break; } else { //Kategorie existuje if(mysql_num_rows($vysledek) > 1) { //je více výsledku s tímto url ..... } else { //existuje pouze jedno url $row = mysql_fetch_assoc($vysledek); $id=$row["id"]; $return = $id; //Navrat id poslední kategorie } } $i++; } while ($aktualnikat != 0); //procházej dokud nedojdeme na hlavní kategorie return $return; } Situace je taková, že mohou existovat v url různé category (např. category1, category2, atd..) Přičemž category2 a další mohou mít stejné url pokud nemají stejnou nadřazenou category. V databázi mám vždy krom id, url a dalších informací také sloupec nadkat který mi právě odkazuje na nadřazenou kategorii. Zatím mi to funguje, pokud není více kategorií které mají stejnou url. Mohl by mi někdo poradit jak doplnit if(mysql_num_rows($vysledek) > 1) { ..... } tak abych mohl zjistit id té kategorie na základě jejich nadřazené kategorie která je v url? |
||
Joker Profil |
#2 · Zasláno: 5. 2. 2008, 21:04:57
Ivorius
Možná úplně nerozumím otázce, ale: Přičemž category2 a další mohou mít stejné url Možná je lepší ukládat do tabulky konečné URL (tj. něco jako nadkategorie/podkategorie), což bude unikátní. Sice to jde proti normalizaci databázových tabulek (v tabulce se uchovávají dopočitatelná data), ale IMHO obhajitelné přínosy, které to bude mít. Další věc, nechápu, proč se to dělá takhle komplikovaně. Kdyby výsledkem byly nějaké "hezké" URL, tak budiž, ale tady bude výsledkem category1, category2,... To už je jednodušší mít adresu třeba ...?category=5 a celé hledání kategorie se zjednoduší na: "SELECT id, nadkat, url FROM kategorie WHERE id=".intval($_GET["category"]); |
||
Ivorius Profil |
#3 · Zasláno: 5. 2. 2008, 21:28:52
Nene, výsledkem je např. neco.cz/kategorie1/kategorie2/kategorie3/ ...Ale to samozřejmě přes .htaccess jde na index.php?category=1&category2...
|
||
Ivorius Profil |
#4 · Zasláno: 5. 2. 2008, 21:32:34
ale může např. nastat situace kdy budu mít
neco.cz/latky/40cm/odstin-bile neco.cz/latky/70cm/odstin-bile neco.cz/bavlna/40cm/odstin-bile a já to právě potřebuji nějak rozlišit jaké to odstin-bile má id na základě předešlých údajů v url. |
||
Joker Profil |
#5 · Zasláno: 5. 2. 2008, 23:14:59
Ivorius
Jo, tak už to snad chápu. Nicméně v tom případě ten .htaccess bude jen na omezený počet kategorií, ne? No, každopádně, jsou asi dvě možnosti. První je to, co jsem psal výše: že u každé kategorie by byla uložená plná cesta, tj. například "bavlna/40cm/odstin-bile", což by bylo jednoznačné. Nevýhoda je, že v databázi budou uložené dopočitatelné (a tím pádem nadbytečné) údaje a při přejmenování nějaké kategorie bude potřeba aktualizovat i všechny podkategorie. Druhý způsob je adresu kategorie "poctivě sestavovat" z údajů v databázi. Tak to dělám třeba na svém webu. Ovšem tady je ale problém, že jestli aktuálně jediný údaj určující umístění dané kategorie ve stromu je ID její nadkategorie, bude potřeba tu tabulku pozměnit. Tady doporučuju nějaký článek na téma ukládání hierarchické struktury do databáze, například tady je to docela pěkně vyložené (ovšem v angličtině): http://www.sitepoint.com/article/hierarchical-data-database |
||
Časová prodleva: 16 let
|
0