Dobrý den, dělám forum a chtěl bych aby u každýho vloženýho příspěvku nějakým uživatelem se zobrazilo kolik dotyčný uživatel už poslal příspěvků.
Vím, že existuje PHPBB forum atd. ale tohle beru jako učení a rád bych tohle chtěl vědět udělat. Mám dvě tabulky uzivatele - (id, uzivatel, heslo, datum_registrace) a tabulku forum - (id, login, zprava, cas_zpravy) vkldání a výpis zpráv z databáze mi funguje jen nevím jak mám udělat počítání příspěvků určitého uživatele. Myslím to tak, jak že uživatel A poslal 5 příspěvků a uživatel B poslal 7. Prosím pomožte, děkuju
Do tabulky uživatele přidej další sloupec: prispevku (integer) a při každém ukládání příspěvku zvyš hodnotu o jedna. Třeba nějak takhle:
UPDATE `uzivatele` SET `prispevku`=prispevku+1 WHERE `uzivatel`="$uzivetel"
nebo pokud sloupec login tabulky forum obsahuje jednoznacny identifikator uzivatele, tak
SELECT COUNT(*) AS pocet FROM forum WHERE login = 'uzivatel'
nebo pro vsechny uzivatele zaraz
SELECT login, COUNT(*) AS pocet FROM forum GROUP BY login
nechce se mi ted premyslet, jestli je lepsi moje nebo Tomovo reseni
to tomovo je sice hezký ale v dotazu jsem zapomněl zmínit registrovaných uživatelů..takže ve foru jediný co vidí je textarea pro zprávu nic jiného s tím count by to šlo ale nevím jak udělat podmínku uzivatel = uzivatel jelikož nezadává do pole jméno.
Registrovaných ve smyslu přihlášených? Třeba přes $_SESSION ?
Do $_SESSION si uložíš IP a login uživatele a potom to může být třeba takhle:
UPDATE `uzivatele` SET `prispevku`=prispevku+1 WHERE `uzivatel`="$_SESSION[$_SEVER{'REMOTE_ADDR'}]"
Tonik: získat obsah jedné buňky je jednodušší (méně časově a výkonnostně náročné) než procházet X tisíc řádků a počítat, které vyhovují podmínce ;)
jj to mám...jenže jak to teď vydoluju z tabulky?
pokud napíšu $select = mysql_query("SELECT zprava FROM forum WHERE ...teď nevím co dát do podmínky...);
$count = mysql_num_rows($select);
echo $count;
protože pokud dám do podmínky $_SESSION[ip] nebo $_SESSION[login] tak to ukáže přihlášeného uživatele, ale ne všech uživatelů. Nevím to jinak vysvětlit
Tom: to jiste je. ted jde o to, jak moc velky to bude rozdil v porovnani s tim updatem. ne, me to dneska fakt nemysli...
Tonik: v našich případech ( tabulky do X tisíc řádků ) bude rozdíl téměř nulovej ;) ale u velkých tabulek už se vyplatí obětovat pár B (KB) každému uživateli navíc ...
homeworld: ty chceš jako tabulku s výpisem všech uživatelů a aby u každého byl počet příspěvků? Pokud ano:
$select = 'SELECT * FROM `tabulka` ORDER BY `name`';
$dotaz = MySQL_Query($sql);
while($data = MySQL_Fetch_Array($dotaz, MYSQL_ASSOC)) {
print_r($data);
}
jinak k te optimalizaci (mit sloupec/pouzivat COUNT):
je samozrejme lepsi pouzivat COUNT. sice to trochu dele trva, ale nedopustis se chyby. "Pocitadlo" je na chyby nachylne a musis davat fakt bacha a osetrovat to na dost mistech, abys tam mel ulozeny skutecny pocet prispevku. Navic treba casem zjistis, ze chces jen ukazat, kolikrat prispel za posledni mesic, nebo cokoliv jineho, a mas problem...
Takze vsemi 10 pro COUNT :-)
tohe (strelka.unas.cz)
nevim, v cem je count pomale, ja mel dojem, ze si pro indexy pocita pocet polozek sam, takze pak je to jen zobrazeni hodnoty z tabulky.
peta: musíš začít myslet v číslech používaných pro pořádný databáze, takže opusť desítky, stovky a tisíce a začni uvažovat ve statisících až milionech.
A tam, už ten count() chvilku trvá (jsou to sice maximálně jednotky vteřin, ale i tak). Jo a ne na všechny tabulky je nutné nasadit indexování ;)
se omlouvám že znovu otevírám tohle téma ale nepodařilo se mi to zprovoznit...
mám jpro registrovaný uživatelé guestbook ve kterém je jen textarea do který když člověk něco napíše, uloží se to do databáze a pak to z databáze pomocí cyklu while dostávám a vypisuju čas vložení zprávy, zprávu, nick .. atd. mno a mezi daty který bych chtěl ukázat bych chtěl dát počet příspěvků...v jiný tabulce jsem si udělal sloupec a když uživatel A napíše nějakou zprávu tak mu to ve sloupeci pocet_prispevku přičte 1. Jenže pokud to doluju z tabulky tak to dělám druhým dotazem než ostatní informace zprávu, nick...atd...mno a aby to našlo správnou buňku - tedy správný počet odeslaných příspěvků pro uživatele A tak musím zadat podmínku aby to našlo vlastní správnou bunku v tabulce.
SELECT pocet_prespevku FROM tabulka <<podmínka>> jenže pokud dám podmínku $_SESSION[] tak mi to ukáže že pro všechny uživatele že poslali příklad 2 příspěvků protože výpis počtu příspěvků je součástí while...takže pro všechny výpisy i když nick bude jiný budou 2 příspěvky...připojí se uživatel B a ten odelsal 10 příspěvků a jelikož je podmínka $_SESSION[] tak pro všechny vypíše 10 příspěvků...
už na týhle prkotině dělám týden a opravdu nevím, prosím pomožte
no tak tam proste nedavej tu podminku s tim session, omg
kdyz uz to teda mas tak, tak co me ted napada:
select uzivatel, pocet_prispevku from tabulka
to nactes treba nekam do pole
pak udelas select, kterym vyberes ty prispevky v guestbooku, tam taky znas pro kazdej prispevek autora = uzivatele
pri vypisu prispevku = guestbooku proste ve vhodny okamzik sahnes do pole z prvniho dotazu, cimz zjistis pro danyho uzivatele pocet jeho prispevku
jeste bys to mohl delat tak, ze pri vypisu kazdyho prispevku se zeptas databaze na pocet prispevku toho konkretniho autora, ale to je o dost horsi varianta, takze to tak nedelej
buď pochválen Tonik :-)
už to funguje jak má