Autor Zpráva
cmelak
Profil
Zdravím všechny.

Řeším takovýto problém:

Mám v databazi jídla které vypisuju na webu, to jsem zvládnul(např.):

(jedna tabulka v databázi)
chleba
houska
rohlik


ale otřeboval bych nějak udělat

aby se nad ten seznam zobrazilo:

pečivo
chleba
houska
rohlik


pití
voda
kola
juice


proste aby se vypsal z databaze seznam s nadpisem

me se nedari aby se ten nadpis zobrazil jen jednou, protože je to v ciklu kde se to pokaždy zobrazi

kod vypadá takto:
na tom začátku vypisování jsem se nějak snažil o vypsání jen jednou, ale prostě nevím jak na to:

$dotaz="SELECT * FROM jidla ,skupinyjidel  WHERE jidla.SkupinaJidel=skupinyjidel.Razeni"; 
//vytvoření sql dotazu
$vysledek = MySQL_Query($dotaz); // provedení sql dotazu 


$jednou = "";
$poc = mysql_num_rows($vysledek);
while ($poc>1)
{ 
$zaznam = MySQL_Fetch_Array($vysledek);

if ($jednou==$zaznam["NazevSkupiny"]){

$NazevSkupiny = $zaznam["NazevSkupiny"];
}
print $NazevSkupiny;

$jednou = 1;

if ($zaznam){
?>
 
            <tr class="text">
              <td width="25"><? print $zaznam["PoradoveCislo"]; ?></td>
              <td width="30"><? if ($zaznam["Gramaz"]) {print $zaznam["Gramaz"] . "g";}?></td>            
              <td width="245"><? print $zaznam["NazevJidla"]; ?><br><? if ($zaznam["Popis"]){ print "(".$zaznam["Popis"].")";}?></td>
              <td class="cena"><? print $zaznam["Cena"]; ?> Kč</td>

<?          
}
$zaznam = MySQL_Fetch_Array($vysledek);
if ($zaznam){
?>          <td width="10"></td>
              <td width="25"><? print $zaznam["PoradoveCislo"]; ?></td>
              <td width="30"><? if ($zaznam["Gramaz"]) {print $zaznam["Gramaz"] . "g";}?></td>             
              <td width="245"><? print $zaznam["NazevJidla"]; ?><br><? if ($zaznam["Popis"]){ print "(".$zaznam["Popis"].")";}?></td>
              <td class="cena"><? print $zaznam["Cena"]; ?> Kč</td>
          </tr>
<?  


}
$poc=$poc-1;
} 

?>


Děkuji moc za pošťouchnutí
Joker
Profil
cmelak
Jedna možnost je například:
$dotaz="SELECT * FROM jidla ,skupinyjidel  WHERE jidla.SkupinaJidel=skupinyjidel.Razeni";

Možná raději:
SELECT * FROM jidla JOIN skupinyJidel ON jidla.skupinaJidel = skupinyJidel.razeni

- to první nejdřív vyrobí tabulku obsahující všechny kombinace těch dvou a potom z ní vybírá řádky, to druhé vyrobí rovnou jen tabulku se "smysluplnými" řádky.
Krom toho je dobré mít u řádků identifikátory a tabulky propojovat přes ně (nevím, jaký účel má sloupec razeni)

Samotný problém by šel řešit třeba tak, že se tabulka seřadí podle druhů jídla (klauzule ORDER BY v SQL dotazu) a PHP si pak vždycky bude pamatovat předchozí použitý nadpis a pokud ten nový bude jiný, vypíše nový nadpis.
cmelak
Profil
Děkuji za radu, ale ten příklad dělá to samé, jako ten muj originální:

takhlee vypada výpis:

ID PoradoveCislo NazevJidla Popis Cena Gramaz SkupinaJidel ID NazevSkupiny Razeni
1 001 HOVĚZÍ CARPACCIO plátky svíčkové, ... 99 80 1 1 Předkrmy 1
2 003 polevka slepičí 79 0 2 2 Polévky 2

a v ciklu se mi ten "NazevSkupiny" vypíše pokaždy, nechápu to

vysledek bych potřeboval tak to zde
tohle je psany v asp a tak jak to je v tom kodu ne to nefunguje :(
Alphard
Profil
$skupina = "";
while ($line = mysql_fetch_array ($vysledek))
{
  if ($skupina != $line['NazevSkupiny'])
  {
    $skupina = $line['NazevSkupiny'];
    echo $line['NazevSkupiny'];
  }
  // zbytek zpracování
}
cmelak
Profil
Dik Alphard pomohlo to.

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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