Topic: Mysql rank funkcija

Database(lentele)

id    first_name     points
    1    Bob             12
    2    Jane       50
    3    Jack              2
    4    Bill             10
    5    Nick              62
    6    Kathy         18
    7    Steve         42
    8    Anne              52

Skriptas:

<?php
$con = mysql_connect("localhost","root","lol");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("st", $con);

$result = mysql_query("SELECT first_name,points,
          @curRank := @curRank + 1 AS rank
FROM      person p, (SELECT @curRank := 0) r
ORDER BY points DESC");

$position = "1";
while($row = mysql_fetch_array($result))
  {
  echo $row['first_name'] . "  " . $row['points'];
  echo "-->";
  echo " Top".$row['rank'];
  echo "<br />";
  $position++;
  }

mysql_close($con);
?>

Gaunu:

Nick 62--> Top1
Anne 52--> Top2
Jane 50--> Top3
Steve 42--> Top4
Kathy 18--> Top5
Bob 12--> Top6
Bill 10--> Top7
Jack 2--> Top8

Taigi gaunu top rank sistemos pagal  taskus  bendra grupe.
Dabar noriu  suzinoti betkokio  nario top tarkim id=1 vartotojo
Pavyzdziui :
Padarau taip

<?php
$con = mysql_connect("localhost","root","lol");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

$id = "1";  //noriu zinoti viena nario rank is visos  lenteles
  
mysql_select_db("st", $con);

$result = mysql_query("SELECT first_name,points,
          @curRank := @curRank + 1 AS rank
FROM      person p, (SELECT @curRank := 0) r WHERE id='$id'
ORDER BY points DESC");

$position = "1";
while($row = mysql_fetch_array($result))
  {
  echo $row['first_name'] . "  " . $row['points'];
  echo "-->";
  echo " Top".$row['rank'];
  echo "<br />";
  $position++;
  }

mysql_close($con);
?>

Gaunu :

Bob 12--> Top1

Raso kad priklauso Top1 nors realiai grupeje yra tik 6estas pagal vieta .Ka daryti ,kad rodytu  normaliai.

Re: Mysql rank funkcija

Nurodydamas sąlygą su WHERE iš rezultatų pašalini visas eilutes kurios neatitinka nurodytos sąlygos. Kadangi apart Bob 12 daugiau nieko nėra (tiksliau geresnių) todėl jis ir yra Top 1.
Norėdamas pakaičiuoti kelintas jis yra, turi paskaičiuoti kiek už jį yra geresnių ir +1. Manau tai užuomina kurios norėjai.

MongoDB Certified Developer
MongoDB Certified DBA
Zend Certified Engineer

Re: Mysql rank funkcija

Vat ir esme ,kad  nezinau kaip tai padaryti ,nesu dar taip igudes su php.

Re: Mysql rank funkcija

daugiau mokykis o ne imk gatavus skriptus naudoti nenutuokdamas ka jie daro :)

var_dump(0 == 'tekstas'); // TRUE. ar zinai kodel? :)

5 (edited by L589 2012-01-26 18:55:12)

Re: Mysql rank funkcija

Tuomet duok pavyzdi, kaip tai padaryti. Tikriausiai cia ne tas forumas ,kad rasai betka ,rinkdamas postus. Minti tikriausiai supratai,  jei negali padeti - nerasyk.

Re: Mysql rank funkcija

L589 wrote:

Tuomet duok pavyzdi, kaip tai padaryti. Tikriausiai cia ne tas forumas ,kad rasai betka ,rinkdamas postus. Minti tikriausiai supratai,  jei negali padeti - nerasyk.

nereikia būti naglam - pats kaltas, jeigu nesugebi pasiieškoti. 99,99% klausimų jau atsakyta jei ne vienur tai kitur...
o tavo rezultatas stebina:
Vakar 20:31:53 - šiandien 18:54:20 = va tiek laiko sugaišai gaudamas rezultatą forume. Tokiais tempais laukdamas atsakymo - mysql;as pasens.

http://stackoverflow.com/questions/1293 … users-rank - netinka šis, pasiieškok kitą ten pat.

Esmė - judink bulkas ieškodamas informacijos, o ne laukdamas kol pateiks tau gatavą rezultatą - pavyzdį!!!

Kiek maigyklių sudėvėjai ?

Re: Mysql rank funkcija

L589 wrote:

Vat ir esme ,kad  nezinau kaip tai padaryti ,nesu dar taip igudes su php.

Ne apie PHP kalba ir eina

MongoDB Certified Developer
MongoDB Certified DBA
Zend Certified Engineer

Re: Mysql rank funkcija

Papraščiausias variantas L589: turimą užklausą modifikuok pridėdamas papildomą filtravimą su HAVING, kad vieno vartotojo atveju atfiltruotu tik jo rezultatą.

Teisingiausias būdas čia aišku yra saugoti "top" ar "reitingo" skaičių prie kiekvieno vartotojo lentelėje papildomame stulpelyje, tuos duomenis atnaujinant tik tada, kai jie realiai pasikeičia (tam, kad nereikėtų pastoviai daryt dinaminių-lėtų skaičiavimų).

Manau, kad jeigu pirmą scriptą pasirašei pats, tai nekils didesnių problemų atlikti bet kurį iš paminėtų modifikacijų.