Autor Zpráva
Pavel_88
Profil *
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
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 *
no jo, uz to vidim, pridal jsem cyklus a uz to jde v poradku... diky za tim, na to spojovani urcite kouknu.
RockFire
Profil
Š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 *
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 *
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
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 *
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 *
za to tykani se omlouvam, jsem uz prepracovany. =o/
Alphard
Profil
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 *
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
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
}

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: