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 *
UPDATE uzivatele SET body=ifnull(body,0)+$body_zisk WHERE lft < $row[lft] AND rgt > $row[rgt]
Kovanda
Profil
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 *
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
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
Tie podmienky mozes zjednodusit takto 125000 < $body <=250000
Kajman_
Profil *
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)

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: