Autor Zpráva
vertigo4
Profil
prosím, neposílejte mě ,,někam"... mám takovýto výpis nejnovějších článků z databáze

<?
$linka = mysql_connect ("************", "********", "**********") or die ("Nenačetl se žádný článek");
$db = mysql_select_db ("jimmyhayek", $linka) or die ("Nenačetl se bohužel žádný článek");
$sql = "SELECT nazev, popis, adresa, kategorie, DATE_FORMAT(datum,'%e. %c. %Y | %k:%i') AS datumek  FROM blog ORDER BY datum DESC LIMIT 10";
mysql_query("SET NAMES 'utf8'");
$result = mysql_query ($sql, $linka);
if($result == false)
die(mysql_error());

while($row = mysql_fetch_array($result)):
?>
<div class="clanek">
<h1><a href="/<? echo $row["kategorie"]."/".$row["adresa"] ?>"><? echo $row["nazev"] ?></a></h1>
 <h4><? echo $row['datumek'] ?></h4>
<p><? echo $row["popis"] ?></p>
         
		  <div class="under"><a href="/<? echo $row["kategorie"]."/".$row["adresa"] ?>">[Celý článek]</a><span>komentářů:</span></div> 
		  </div>
<?
endwhile;
?>   			


no a tam mezi span chci vložit počet komentářů k jednotlivým článkům...
ty komentáře ukládám do tabulky diskuse a každý komentář má uloženou adresu, což odpovídá danému článku kde také ukládám adresu (např.: stát-jako-hrnek-na-stole) a podle toho také vypisuji jednotlivé kometáře pod článkem...

nevím ale jak to mám propojit, aby se mi vypsal počet kometářů v tabulce diskuse, kde adresa se rovná adrese v tabulce blog.... vím že to bude něco s COUNT a GROUP BY, ale nedokáži to dát dohromady... a k tomu aby se mi to vypisovalo u každého článku...
djlj
Profil
COUNT(diskuse.id) ... LEFT JOIN diskuse ON blog.adresa=diskuse.adresa ... GROUP BY blog.id

Je však třeba podotknout, že taková struktura je vyloženě hloupá. Do tabulky diskuse ukládej jen id článku. Ještě lepší je ukládat si počet komentářů přímo do tabulky blog ke každému článku.
Aleš Janda
Profil
Ještě lepší je ukládat si počet komentářů přímo do tabulky blog ke každému článku.

To nedělej. Pak smažeš jeden komentář a počet komentářů už nebude platit. Jedině na to nastavit trigger, ale .. proč? :-)
Kajman_
Profil *
Předpočítávání se hodí u hodně velkých systémů. Pro jeden blog to klidně může dělat count z druhé tabulky.
Mastodont
Profil
Aleš Janda
Takovéhle dynamické počítání není špatné, ale chce to samozřejmě řešit třeba storkou nebo metodou objektu.
vertigo4
Profil
djlj
ale já id nemám...
djlj
Profil
To nedělej.
Proč?

Pak smažeš jeden komentář a počet komentářů už nebude platit.
Stačí odečíst jedničku. Tohle měl jako být důvod proč to nedělat?

vertigo4
Tak to máš blbý.
Aleš Janda
Profil
Pak smažeš jeden komentář a počet komentářů už nebude platit.
Stačí odečíst jedničku. Tohle měl jako být důvod proč to nedělat?


Ten důvod proč to nedělat je, že vůbec umožníš, aby byla databáze v nekonzistentním stavu. Dvakrát to číslo odečteš a jednou zapomeneš.
Navíc je to evidentně duplicitní informace. To je chyba návrhu :-)

Pochopit by se to dalo pouze z výkonnostních důvodů (což ale u blogů nemá valného smyslu). A i tak bych takový "zbytečný" sloupec označil (já např. před to dávám prefix x_), abych viděl "bacha, pouze výstupní, není na to spoleh".

ale já id nemám...

Nedat id je také chyba návrhu :-) Co když budeš chtít změnit adresu? Budeš ji měnit u všech komentářů? To id má výhodu právě v tom, že neznamená *vůbec nic*, tj. nikdy nebude potřeba ho měnit.
djlj
Profil
Dvakrát to číslo odečteš a jednou zapomeneš.
Předpokládám, že se to nebude udělat ručně a že skript to „nezapomene“ udělat.

Navíc je to evidentně duplicitní informace. To je chyba návrhu :-)
Hloupost.

Souhlasím s tím, že u malého webu to nemá smysl. Jinak to smysl má a chyba návrhu to není ani náhodou.
vertigo4
Profil
Aleš Janda
Co když budeš chtít změnit adresu? Budeš ji měnit u všech komentářů?
to máš pravdu, ale já dávám adresu ve tvaru názvu (bez hačku, čarek, s -...atd.), takže není potřeba ji měnit a ani bych jí už neměnil, když existuje... ale chápu, že je to jisté mínus mojí databáze...
Aleš Janda
Profil
Předpokládám, že se to nebude udělat ručně a že skript to „nezapomene“ udělat.

Skript ne, ale ty musíš ten skript správně napsat. A také všechny budoucí skripty s tou tabulkou pracující.
Navíc já osobně třeba v phpMyAdminu běžně něco u/opravuju. Mít v DB takové zákeřnosti, nebylo by to moc příjemné.

Jinak to smysl má a chyba návrhu to není ani náhodou.

Duplicita má význam pouze ve specifických, dobře zdůvodněných a dobře zdokumentovaných případech. Jinak je to jasná chyba návrhu, viz navrhování čehokoliv (nejen DB).

to máš pravdu, ale já dávám adresu ve tvaru názvu (bez hačku, čarek, s -...atd.), takže není potřeba ji měnit a ani bych jí už neměnil, když existuje...

Co když ta adresa obsahuje překlep a druhý komentář tě na to upozorní? Necháš to tak?
djlj
Profil
Skript ne, ale ty musíš ten skript správně napsat.
No a? To snad musím udělat ať píšu cokoliv.

A také všechny budoucí skripty s tou tabulkou pracující.
Trigger…

Duplicita má význam pouze ve specifických, dobře zdůvodněných a dobře zdokumentovaných případech.
Slovo duplicita je v tomhle případě dost zavádějící.

Jinak je to jasná chyba návrhu, viz navrhování čehokoliv (nejen DB).
Ve tvých představách možná.

No očividně tedy neprovozuješ žádný pořádně velký web :). Tímto bych to ukončil. Dělej, jak uznáš za vhodné.
Aleš Janda
Profil
No očividně tedy neprovozuješ žádný pořádně velký web :)
Bohužel provozuju, ale tazatel se ptal na řešení pro blog.

Tímto bych to ukončil.
Souhlasím :-)

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: