Autor | Zpráva | ||
---|---|---|---|
Resigo Profil * |
#1 · Zasláno: 12. 10. 2011, 21:18:03
Dobrý den, chtěl jsem se zeptat jak bych měl udělat z toho to kódu (popis: když kliknu na uživatele tak se mu přičtou body):
$query = mysql_query("UPDATE users SET points = points+1 WHERE username='$searchuser'"); |
||
Tori Profil |
#2 · Zasláno: 12. 10. 2011, 21:22:36
Přidala bych tabulku pro ta hodnocení (sloupce: ID hodnoceného, ID hodnotícího - a unikátní klíč přes oba dva dohromady). Unik.klíč se postará o to, aby každý uživatel mohl jiného hodnotit jen jednou, a počet bodů = počet odpovídajících řádků). To se mi zdá tak nějak nejjednodušší, a dá se to později přidáním sloupce rozšířit na hodnocení čehokoli jiného.
|
||
Resigo Profil * |
#3 · Zasláno: 12. 10. 2011, 21:38:12
Tori:
Moc ti děkuju, prosím nemohla by si mi s tím pomoci, nebo mi aspon mohla vysvetlit co to je „unikátní klíč“ a jak ho použít :) (Promin jsem začátečník) |
||
Tori Profil |
#4 · Zasláno: 12. 10. 2011, 21:57:29
Resigo:
Unikátní klíč = hodnoty v tom sloupci (v tomto případě kombinace hodnot ve dvou sloupcích) se nesmí opakovat. Když pak vkládáte data, MySQL vyhodí chybu "duplicitní hodnoty" - podle toho zjistíte, že uživatel už toho druhého uživatele hodnotil. (Hodnocení sebe sama asi snáz zabráníte v PHP.) SQL příkaz na vytvoření indexu je přibližně CREATE UNIQUE INDEX ON tabulka (ID_hodnoceného, ID_hodnotícího) |
||
Resigo Profil * |
#5 · Zasláno: 12. 10. 2011, 22:18:16
Tori:
Moc děkuji! Ted už se ptám jen tak na okraj: dá se z téhle tabulky posílat někam ty data (teda počet kolikrát na koho bylo kliknuto) ptám se proto abych mohl tabulku třeba každý týden resetovat? :) |
||
Tori Profil |
#6 · Zasláno: 12. 10. 2011, 22:27:39 · Upravil/a: Tori
Kam někam? Je to obyč.tabulka, co z ní načtete, to můžete poslat kde chcete. :)
Ale jestli to chcete jen kvůli něčemu jako "tento týden jsi dostal/a 123 hlasů", tak bych (místo průběžného promazávání) jen přidala sloupec s datumem, a pak vybírala počty řádků s omezením na max.týden staré, a seskupené podle hodnoceného uživ. |
||
lukasik Profil |
#7 · Zasláno: 12. 10. 2011, 23:02:46
Ted už se ptám jen tak na okraj: dá se z téhle tabulky posílat někam ty data (teda počet kolikrát na koho bylo kliknuto) ptám se proto abych mohl tabulku třeba každý týden resetovat? :)
Pokud myslíš vycucnout tak to jde jednoduchým kódem "SELECT COUNT(*) FROM tabulka WHERE ID_hodnoceného = X" |
||
Anonym Profil * |
#8 · Zasláno: 13. 10. 2011, 08:39:24
lukasik:
Ano, něco takového jsem myslel, ale předtím jsem neuvedl kam to chci přesunout a to do jiné tabulky. Proto jsem se chtěl zeptat jestli to mám dělat tak, že si to vypíšu do jedne proměnné a tu insertem vložím do te druhe tabulky. Nebo jestli do jde nějak jinak? Nejlepe jedním příkazem. Tori: Přesný popis: Jde mi o to, že když hráč klikne na uživatele (ten co už na něj jednou kliknul) třeba za týden tak se tomu uživateli přidají zase body, ale ne dřív než když na něj klikne za ten týden :) |
||
Anonym Profil * |
#9 · Zasláno: 13. 10. 2011, 14:46:31
Dobrý den, tak jsem to nějak zprovoznil, kouknuli byste se mi na ten kód jestli je správně prosím :)
$queryrank = mysql_query("INSERT INTO ranking VALUES ('$searchid', '$id')"); //dám do tabulky ranking, tam je ten unik. klíč <?php if(isset($searchid)){ $hodnoceni = mysql_query("SELECT ID FROM ranking WHERE id = $searchid "); $data = mysql_num_rows($hodnoceni); echo ($data); } $insert = mysql_query("UPDATE users SET points='$data' WHERE username='$searchuser'"); //vložím do tabulky ze které vypisuji body ?> |
||
Tori Profil |
#10 · Zasláno: 13. 10. 2011, 19:50:29 · Upravil/a: Tori
Anonym:
Aha, myslela jsem to tak, že by ta nová tabulka úplně nahradila sloupec users.points. Počet bodů, které uživatel dostal, byste zjišťoval spojením tabulek: SELECT u.*, COUNT(*) 'points' FROM users u LEFT JOIN ranking r ON u.id = r.id_hodnoceneho_uzivatele „tak se tomu uživateli přidají zase body, ale ne dřív než když na něj klikne za ten týden“ K tomu mě napadl tento postup: Přidat tabulce ranking ještě 2 sloupce: 1. datum (DATE) - kdy byl uživatel1 tímto uživatelem2 naposled hodnocený 2. body (INT) - kolik bodů už od tohoto uživatele2 dostal. Vložení záznamu by pak vypadalo asi takhle: // zkusíme vložit nové hodnocení $ins = mysql_query("INSERT INTO ranking (hodnoceny, hodnotici, datum) VALUES ($id1, $id2, CURDATE())"); if (!$ins && mysql_errno() == 1062) { // duplicita - uživatel1 už byl uživatelem2 hodnocen. Zkusíme přidat další hlas $update = mysql_query("UPDATE ranking SET body=body+1 WHERE hodnoceny = $id1 AND hodnotici = $id2 AND ADDDATE(datum, 7) > CURDATE() LIMIT 1"); if (mysql_affected_rows() == 0) { // chyba - ještě neuplynul týden } } Nicméně to ukládání počtu bodů i k uživatelům (=při každém přidání hlasu zároveň updatovat tab. users) není špatný nápad - pokud byste měl hodně uživatelů a v ranking by bylo hodně řádků (nevím přesně odhadnout, určitě aspoň 10-tisíce), tak by se tím urychlilo čtení z DB. |
||
Anonym Profil * |
#11 · Zasláno: 13. 10. 2011, 21:28:03
Tori:
Moc ti děkuju, nějak to zkusím to tam dát :) |
||
Časová prodleva: 12 let
|
0