Autor | Zpráva | ||
---|---|---|---|
Pavel_88 Profil * |
#1 · Zasláno: 3. 11. 2009, 22:03:02
Zdravim Vas!
mam mensi problem s vypisem z databaze. ukazkovy priklad je napr na katalogu. Mam nejakou hlavni kategorii, ktera ma subkategorie. hlavni kategorie ukladam do jedne tabulky a subkategorie do tabulky druhe, kde mam navic sloupec "id_cat" kde hodnota (cislo) odpovida ID hlavni kategorie. Problem mam v tom, ze mi to vypisuje pouze jednu (prvni) subkategorii a ne vsechny (podle toho WHERE id_cat...). Nemate napad jak php kod upravit, aby mi vypsal veskere kategorie, ktere maji dane id_cat? <?php $vyber = mysql_query("SELECT * FROM "hl_kategorie"", $spojeni);//vytahneme z db informace o hlavnich kategoriich while ($vypis = mysql_fetch_array($vyber)){ $cat_id = $vypis['id']; $cat_nadpis = $vypis['nadpis']; echo "Nadpis kategorie: $cat_nadpis<br>";//vypise hlavni kategorie $Vyber_subcat = mysql_query("SELECT * FROM "sub_kategorie" WHERE cat_id=$cat_id") or die(mysql_error());//vytahneme z db informace o sub kategoriich $Vypis_subcat = mysql_fetch_array($Vyber_subcat); $subcat_title = $Vypis_subcat['subcat_title']; echo "tato kategorie obsahuje tyto ubkategorie: $subcat_title";//vypise sub kategorie } ?> |
||
AM_ Profil |
#2 · Zasláno: 3. 11. 2009, 22:14:36
Divím se, že to vůbec funguje, ale PHP zkousne hodně syntaktických paskvilů.
"SELECT * FROM `sub_kategorie` WHERE cat_id=$cat_id" Sem rozhodně zpětné uvozovky!!! žádné klasické "", divím se, že to funguje, přinejmenším to stejně musí vyhazovat notice o nedefinované konstantě. jinak když chceš vypsat všechny podkategorie, musíš ten výpis mít samozřejmě také v cyklu, když se na tohle podíváš, v každém cyklu se výpis podkategorie provede jen jednou, proto to nemůže fungovat. Lepší by ale bylo nastudovat spojování tabulek a vše vybrat v jednom dotazu, tohle bude zbytečně náročné na DB. |
||
Pavel_88 Profil * |
#3 · Zasláno: 3. 11. 2009, 22:18:36
no jo, uz to vidim, pridal jsem cyklus a uz to jde v poradku... diky za tim, na to spojovani urcite kouknu.
|
||
RockFire Profil |
#4 · Zasláno: 3. 11. 2009, 22:38:53
Šlo by to i jinak, ale podle tvého uspořádání db by to šlo řešit takto:
<?php $nalezeni_kategorie = mysql_query("SELECT * FROM `hl_kategorie`"); while($vysledek_nalezeni_kategorie = mysql_fetch_array($nalezeni_kategorie)) { echo 'Nadpis kategorie:'.$vysledek_nalezeni_kategorie["nadpis"].'<br> Tato kategorie obsahuje tyto subkategorie:<br>'; $nalezeni_subkategorie = mysql_query("SELECT * FROM `sub_kategorie` WHERE cat_id = '".$vysledek_nalezeni_kategorie["id"]."'"); while($vysledek_nalezeni_subkategorie = mysql_fetch_assoc($nalezeni_subkategorie)) { echo $vysledek_nalezeni_subkategorie["subcat_title"]."<br>"; } } ?> |
||
Pavel_88 Profil * |
#5 · Zasláno: 3. 11. 2009, 23:05:05
jj ok :) toto mi uz funguje, ale zkousim pouzit JOIN aby tam byl jen jeden dotaz na db jak radil AM_ ale mam zase problem s vypisem... nejak se mi nedari to vypsat tak jak bych chtel. Vypisuje mi to nasledujici:
Auta - luxusni Auta - ojeta Auta - americka Sluzby - kadernictvi Sluzby - Pedikura . . . to je ale spatne, zkousim vypis resit uz asi pul hodiny, ale stale se nedari, tak se obracim uz se zoufalstvim na Vas.. vypis by mel vypdat nejak takto: Auta - luxusni, ojeta, americka Sluzby - kadernictvi, pedikura . . . nevidite tam prosim nekde chybku? <?php //sql dotaz $vyber = mysql_query(" SELECT tabulka_kategorii.cat_title, tabulka_SUBkategorii.subcat_title FROM tabulka_kategorii JOIN tabulka_SUBkategorii ON tabulka_kategorii.id = tabulka_SUBkategorii.cat_id ", $spojeni) or die(mysql_error()); //sql dotaz end while ($vypis = mysql_fetch_array($vyber)){ $cat_title = $vypis['cat_title'])); $sub_cat_title = $vypis['subcat_title'])); echo " Nadpis kategorie - $cat_title <br> tato kategorie obsahuje tyto SUBRKATEGORIE: $sub_cat_title, ";} ?> |
||
Pavel_88 Profil * |
#6 · Zasláno: 3. 11. 2009, 23:06:16
jen mala chyba v radku 13 a 14... ty kulate zavorky na konci tam byt nemaji, jak jsem se kod snazil co nejvice zjednodusit aby to bylo prehledne tak jsem je zapomnel umazat. Takze tedy:
$cat_title = $vypis['cat_title']; $sub_cat_title = $vypis['subcat_title']; |
||
Alphard Profil |
#7 · Zasláno: 3. 11. 2009, 23:10:56
Není to chyba, je to vlastnost. Viz http://diskuse.jakpsatweb.cz/?action=vthread&forum=28&topic=98424&page=-1#5
Jestli chcete vypsat i prázdné kategorie, dejte tam left join. |
||
Pavel_88 Profil * |
#8 · Zasláno: 3. 11. 2009, 23:16:33
ted nevim zda jsi spatne pochopil ty nebo spatne chapu ja (coz je asi vice pravdepodobne :)).
nyni mi to vypisuje takto: a ja bych chtel docilit toho aby ta hlavni kategorie (tedy ten velky modry nadpis) byl na strance jednou a pod nim by se vypsali veskere podkategorie ktere k dane (hlavni) kategorii patri.. zkusil jsme LEFT JOIN ale vysledek byl stejny. |
||
Pavel_88 Profil * |
#9 · Zasláno: 3. 11. 2009, 23:19:42
za to tykani se omlouvam, jsem uz prepracovany. =o/
|
||
Alphard Profil |
#10 · Zasláno: 4. 11. 2009, 06:50:41
Pavel_88:
Tykání je v pohodě, je tady zvykem si tykat, jen několik lidí si zvyklo jinak. Myslím, že jsem to pochopil správně, možná jste to špatně použil. Když vyjdu z [#5], tak místo $line['pismeno'] by mělo být $vypis['cat_title'] v podmínce a $vypis['subcat_title'] mimo ni. |
||
Pavel_88 Profil * |
#11 · Zasláno: 4. 11. 2009, 10:11:52
aha, jasne... myslim ze jsem to pochopil, ale mrknu se na to az vecer, ted musim bezet do prace. Diky za ochotu a snad se dopracuju ke spravnemu vysledku :)
|
||
tiso Profil |
#12 · Zasláno: 5. 11. 2009, 02:32:01
Pavel_88: algoritmus na toto som tu už viac-krát písal:
$cat=''; while($row=mysql_fetch_assoc($result)){ if($cat != $row['cat']){//mame novu kategoriu, vypis ju echo $row['cat']; $cat=$row['cat']; } echo $row['subcat'];//vypis podkategoriu } |
||
Časová prodleva: 14 let
|
0