Autor Zpráva
noby
Profil
Dobrý den mám již druhý problém v dnešním dni a to sice takový že v jednom výpisu se mi počet komentářů zobrazí ale v dalším výpisu už ne. Můžete mi poradit kde je problém?
V tomto výpisu to jde:
<?php
$idx = intval($_GET['id']);
// Výpis z databáze
$clanek = mysql_query("SELECT * FROM clanky WHERE id = '$idx'") or die(mysql_error());
    $id = mysql_fetch_assoc($clanek);
// Vloženo
$datum = date("d.m.Y", $id['vlozen']);
// Počet komentářů
$pocet = mysql_query("SELECT count(id) FROM komentare WHERE id_clanku='$idx'");
$pocetx = mysql_fetch_array($pocet);

echo '<h3>'.$id['nazev'].'</h3>
      <b>Vloženo:</b> '.$datum.' | <b>Kometováno:</b> '.$pocetx["0"].'';
?>


V tomto výpisu to ovšem už nefunguje:

<?php
$clanek = mysql_query("SELECT * FROM clanky ORDER BY id DESC LIMIT $strana, $max") or die (mysql_error());
    while($id = mysql_fetch_array($clanek))
      {
$idx = intval($_GET['id']);
$pocet = mysql_query("SELECT count(id) FROM komentare WHERE id_clanku='$idx'");
$pocetx = mysql_fetch_array($pocet);
$datum = date("d.m.Y", $id['vlozen']);
echo '<tr><td><input type="checkbox" name="'.$id['id'].'"></td><td class="td">'.$id['nazev'].'</td><td class="td">'.$datum.'</td><td style="text-align: center;" class="td">'.$pocetx["0"].'</td><td style="text-align: center;" class="td">'.$pocitadlo['pocet'].'</td><td class="td"><a href="admin.php?page=edit&amp;id='.$id['id'].'"><img src="images/edit.png" title="Editovat článek '.$id['nazev'].'"></a> <a href="delete.php?id='.$id['id'].'"><img src="images/delete.png" title="Smazat článek '.$id['nazev'].'"></a></td></tr>';
      }
?>


Poradí mi někdo z Vás kde dělám chybu v těchto dvou zápisech když v jednom počet komentářů funguje a v druhém ne?
Tori
Profil
V druhém výpise chcete zobrazit všechny články a k nim počet komentářů? Pak nemůžete používat id z $_GET (= pokaždé stejné), ale to z tabulky článků. A vůbec by to šlo napsat i jedním dotazem:
$result = mysql_query("SELECT c.*, count(*) 'pocetKomentaru' FROM clanky c
LEFT JOIN komentare k ON c.id = k.id_clanku
GROUP BY c.id DESC 
LIMIT $strana, $max");
while ($clanek = mysql_fetch_assoc($result)) {..... }


Edit: Teď koukám, že přesně stejné řešení je popsané ve FAQ, jsme tam nekoukli ani jeden.
noby
Profil
Tori:
Ano v druhém výpisu chci zobrazit všechny články i počet komentářů u daného článku. Spojování tabulek jsem se zatím neučil proto bych byl raději pro řešení ve dvou zápisech a ne jedním zápisem.
Tori
Profil
No ono to není rozdíl jednoduchý vs. složitější zápis, ale 1 dotaz vs. (počet článků+1) dotazů. Prostě to bude jako doteď číst data jednotlivých článku, jen na každém řádku bude navíc i počet komentářů.
Jestli chcete jen opravit chybu, tak je na řádku 5, patří tam id z prvního dotazu.
noby
Profil
Jenže když z $idx udělám $id nezobrazí se žádný článek. Tak to vypadá že to bude opět běh na dlouhou trať.
peta
Profil
Co to ma delat?
"chci zobrazit všechny články i počet komentářů u daného článku."

<?php
$clanek = sq("SELECT * FROM clanky ORDER BY id DESC LIMIT $strana, $max"); // kde sq bude nejaka funkce,
// ktera uz ma i to die, aby byl kod prehlednejsi
    while($id = mysql_fetch_array($clanek)) // tady bych to zmenil na $row jako radek z tabulky
      {
$idx = intval($_GET['id']);// tady davas id clanku poslaneho pres get
$pocet = sq("SELECT count(id) FROM komentare WHERE id_clanku='$idx'"); // a tady k tomu jedinemu 
//clanku zobrazujes pocet komentaru, takze vsechny clanky budou mit jedine stejne cislo.
// To se ti pokousela napsat Tori: "na řádku 5, patří tam id z prvního dotazu. ". 
//Jinimi slovy, na radku 6 melo byt misto $idx neco jako {$id['id']}
$pocetx = mysql_fetch_array($pocet);
$datum = date("d.m.Y", $id['vlozen']);
echo '
<tr>
<td><input type="checkbox" name="'.$id['id'].'"></td>
<td class="td">'.$id['nazev'].'</td>
<td class="td">'.$datum.'</td>
<td style="text-align: center;" class="td">'.$pocetx["0"].'</td>
<td style="text-align: center;" class="td">'.$pocitadlo['pocet'].'</td>
<td class="td">
  <a href="admin.php?page=edit&amp;id='.$id['id'].'"><img src="images/edit.png" title="Editovat článek '.$id['nazev'].'"></a>
  <a href="delete.php?id='.$id['id'].'"><img src="images/delete.png" title="Smazat článek '.$id['nazev'].'"></a>
</td>
</tr>';
      }
?>
noby
Profil
Aha děkuji. Četl jsem tuto poslední zprávu pár dní než jsem jí pochopil, a nakonec pochopil a funguje díky všem zučatsněným za radu

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:

0