Autor | Zpráva | ||
---|---|---|---|
Kovanda Profil |
Předem zdravím pánové a chtěl bych vás poprosit o radu. Jako samouk s tím docela zápasím a už nevím jak bych to do googlu napsal.
Pokouším se o stromovou databázi uživatelů kde pozice záleží na počtu bodů. Když někdo získá body, získají je zároveň všichni nad ním. Přiřazení pozice mám udělané jednoduchou funkcí "pozice" která vložením celkových bodů vrátí pozici. Vypsat všechny uživatele už sem nastudoval, přiřadit jim pozice taky není problém, ale nevím jak to zpátky zapsat do databáze. Jak bude vypadat UPDATE? WHERE je jasné že bude stejné jako u výpisu. Použít pole? Co nastudovat, pokud možno v češtině, ale není podmínkou. Předem dík. $row = mysql_fetch_assoc(mysql_query("SELECT * FROM uzivatele WHERE id = " . intval($id))) or die (mysql_error()); $result1 = mysql_query("SELECT * FROM uzivatele WHERE lft < $row[lft] AND rgt > $row[rgt] ORDER BY lft") or die (mysql_error()); while ($row1 = mysql_fetch_array($result1)) { $body_puvodni = $row1["body"]; $body_celkem = $body_puvodni + $body_zisk; echo pozice ($body_celkem); Moderátor panther: Vkládej prosím kódy mezi značky [>pre] a [>/pre] (stačí kliknout na ).
|
||
Kajman_ Profil * |
#2 · Zasláno: 4. 3. 2011, 11:32:49
UPDATE uzivatele SET body=ifnull(body,0)+$body_zisk WHERE lft < $row[lft] AND rgt > $row[rgt] |
||
Kovanda Profil |
#3 · Zasláno: 4. 3. 2011, 12:44:03
Kajman:
Dík, ale přičtení bodů není problém, to je u všech stejné to bych dohromady dal, jde mi spíš o tu pozici. |
||
Kajman_ Profil * |
#4 · Zasláno: 4. 3. 2011, 12:59:40
Tak asi ještě druhý update.
set @pozice=0; update odkazy set position=@pozice:=@pozice+1 order by body desc; S tím, že pokud chcete mít např. dvě první místa, když mají stejně bodů, bude potřeba ještě třetí update. |
||
Kovanda Profil |
#5 · Zasláno: 4. 3. 2011, 15:53:22
Kajman:
Jestli jsem to dobře pochopil tak váš UPDATE určí akorát pořadí podle počtu bodů, ale já potřebuji přiřadit pozici (postavení) podle počtu získaných bodů. Pozici mohou mít stejnou třeba všichni. Pro ukázku přikládám raději i tu funkci. function pozice ($body){ if ($body <=600){ return 1;} elseif ($body >600 and $body <=3000){ return 2;} elseif ($body >3000 and $body <=15000){ return 3;} elseif ($body >15000 and $body <=60000){ return 4;} elseif ($body >60000 and $body <=125000){ return 5;} elseif ($body >125000 and $body <=250000){ return 6;} elseif ($body >250000){ return 7;} } |
||
pcmanik Profil |
#6 · Zasláno: 4. 3. 2011, 16:02:05
Tie podmienky mozes zjednodusit takto 125000 < $body <=250000
|
||
Kajman_ Profil * |
#7 · Zasláno: 4. 3. 2011, 16:05:00
Tak to bude nejlepší, když si takovou funkci vytvoříte v mysql a použijete ji při update (nebo ji rovnou navážete triggerem before insert a update na změnu hodnoty ve sloupci body).
http://dev.mysql.com/doc/refman/5.5/en/stored-routines.html Aby se nedělal pro každého uživatele update zvlášt, tak by se i v tom php přístupu daly dávat k sobě do pole podle jednotlivých pozic id uživatelů a pak by se zavolalo tolik updatů, do kolika různých skupin by se dostali. update uzivatele set pozice=4 where id_uzivatele in (1,5,42,1048576) |
||
Časová prodleva: 13 let
|
0