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: 13 let
|
0