| Autor | Zpráva | ||
|---|---|---|---|
| noby Profil |
#1 · Zasláno: 23. 8. 2011, 21:56:32 · Upravil/a: noby
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&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 |
#2 · Zasláno: 23. 8. 2011, 22:53:22 · Upravil/a: Tori
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 |
#3 · Zasláno: 23. 8. 2011, 23:12:11 · Upravil/a: noby
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 |
#4 · Zasláno: 23. 8. 2011, 23:25:20
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 |
#5 · Zasláno: 23. 8. 2011, 23:40:38
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 |
#6 · Zasláno: 24. 8. 2011, 10:37:20 · Upravil/a: peta
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&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>';
}
?> |
||
|
Časová prodleva: 13 dní
|
|||
| noby Profil |
#7 · Zasláno: 6. 9. 2011, 20:11:29
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
|
||
|
Časová prodleva: 15 let
|
|||
0