Autor | Zpráva | ||
---|---|---|---|
Welton123 Profil |
#1 · Zasláno: 15. 8. 2013, 16:27:01
Zdravím, dělám webový, soutěžní web, kde si uživatel bude schánět hlasy ke svému mazlíčkovi. V tabulce se automaticky řadí podle toho, kdo má nejvíce hlasů. Problém je vtom, že po měsíci mažu veškeré hlasy, aby měli šanci i nový uživatelé. Nějak ale nevím, jak udělat, aby zůstalo stejné pořadí soutěžících i po smazání hlasů. Máte nějaký návrh jak toho docílit?
Předem děkuji za každé rady. |
||
Enko Profil * |
#2 · Zasláno: 15. 8. 2013, 17:01:37
Pokud hlasy ukládáš do databázové tabulky, přidej si do konkrétní tabulky s hlasováním další sloupec, který bude určovat pořadí.
|
||
Tori Profil |
#3 · Zasláno: 15. 8. 2013, 17:52:06
Welton123:
A co kdyby se každý den odmazávaly jen hodnocení starší než 1 měsíc? Pokud by nové fotky dostávaly hlasy často a staré už jen občas, tak se ty nové postupně dostanou nahoru samy. Jinak by mě totiž zajímalo, kdy a podle jaké logiky byste zase přepnul z pořadí "staré fotky z minulých měsíců" na pořadí "staré i nové fotky z tohoto měsíce", resp. jak byste v době těsně po smazání hlasů seřadil tyto fotky: Kikina - minulý měsíc první s pěti hlasy, tento měsíc nehodnocena, kočka Myš - minulý měsíc poslední se třemi hlasy, tento měsíc dva hlasy, Béďa - nový, tento měsíc čtyři hlasy Anebo možná by se dalo dopočítávat váhu jednotlivých hlasů, že jeden hlas před měsícem je třeba 25% jednoho hlasu z dneška. |
||
Welton123 Profil |
#4 · Zasláno: 15. 8. 2013, 20:27:58
Takže to myslíš tak, abych nechal všechny hlasy v DB a na konci třeba měsíce září bych nastavil, aby se vypisovali pouze Ty, které jsou v měsíci říjnu a takto vždy v tom měsíci jen posunul datum? :)
Pokud ano, jak při výběru nastavit, aby to bralo jen hlasy za posledních 30 dnů? :/ |
||
Tori Profil |
Welton123:
U každého hlasu by mělo být uloženo, kdy byl přidán, tj. sloupec typu date nebo datetime (podle toho, jestli chcete ukládat i čas). Vlastně byste teda nemusel hodnocení promazávat, ale stačilo by pokaždé pracovat jen s hlasy za posledních 30 dní. Výběr řádků jen za poslední měsíc pak bude vypadat např. $hranice = date('Y-m-d', strtotime('today - 30 days')); // vytvoří "2013-07-16" $sql = "select * from tabulka where datumPridani > '$hranice'"; $sql = "select * from tabulka where datumPridani > date_sub(now(), interval 30 day)"; |
||
Welton123 Profil |
#6 · Zasláno: 16. 8. 2013, 10:24:41
Zapisuji do jedné tabulky ip adresu uživatele a pokud na web příjde až za 24 hodin, tak se jeho jeho ip smaže a může hlasovat znova.
Problém je, že hlasy přičítám ke každé fotce $hlasy+1, takže čas apod.. neukládám :/ |
||
Kajman Profil |
Welton123:
Tak z té tabulky se záznamem ip nemažte. V selectu, kterým se do ní díváte, zda tam ip je, tak přidejte podmínku, že hledáte záznam mladší 24 hodin. Hlasy si klidně dál počítejte +1, ale jednou denně si přepočítejte počet hlasů podle té logovací tabulky, s omezením na záznamy z posledních 30 dnů (tohle je možné korektně udělat, až tam budemete mít záznamy těch 30 dní zpátky). Jsou to malé změny současného mechanizmu. Jinak, aby se skutečně zachovalo pořadí, třeba by šlo neukládat hlasy jako celá čísla, ale hlasováním přidávat hodnoty s plovoucí čárkou, kdy každý den bude mít větší váhu než den předešlý. |
||
Časová prodleva: 11 let
|
0