Autor Zpráva
peta
Profil
lze nejak zjistit poradi sloupce, kdyz jej vyberu podle ORDER BY?

Mam tabulku anket, kde mam sloupec "pocet hlasu" a ted si zobrazim na obrazovku treba udaje 20-40. To by bylo v poho, to nejak v PHP.

Ale ted mam treba vyhledavani podle sloupce "jmeno", ze se chci podivat, jak na tom jsem s hodnocenim. Jsem treba 53. v poradi podle 'poctu hlasu". jak toto cislo zjistim?
Respekt, chtel bych vypsat 40-60, stranku, kde jsem zobrazeny (a sebe zvyraznit, coz je PHP). Jak zjistim, ze jsem zrovna na strance 40-60?
Kajman_
Profil *
Spočítáte počet řádků, které jsou po seřazení před tím kokrétním, a přičtete jedničku.
peta
Profil
Kajman_
Hm, a jak?
vyber radku:
"SELECT * FROM $tab WHERE `name`='pepa' LIMIT 1"
z toho dostanu treba $id
a ted, jak to $id vyuzit pro to pocitani?
rekneme, ze vypis vypada nejak takto:
"SELECT * FROM $tab ORDER BY `skore` DESC LIMIT $a,$b"
kde $a a $b bych chtel prave nastavit na tech 40-60, jenze nevim, kolikaty v poradi je zaznam $id.
A jak teda zjistim to poradi?
Kajman_
Profil *
select count(*) lepsich from $tab where `skore`>'$pepovoskore'
peta
Profil
Kajman_
Jej, jasne :)
"SELECT * FROM $tab WHERE `name`='pepa' LIMIT 1"
-> $id
-> $skore
"SELECT COUNT(*) FROM $tab WHERE `skore`>='$skore'"
-> $pozice

To tve lepsich moc nechapu, to bys musel rozepsat, ja bych pouzil toto.

Dik. A ja premyslel, jestli na to neni nejaky spesl prikaz a toto je v podstate super.
Takhle, kdybych chtel vypisovat cislo pozice pro kazdy z 20 radku, tak si ted musim udelat script, ktery mi nahore vezme prvni cislo a k tem ostatnim pricitam +1 (abych nezatezoval SQL)
Hugo
Profil
select count(*) lepsich from $tab where `skore`>'$pepovoskore'

se dá taky napsat jako

select count(*) AS lepsich from $tab where `skore`>'$pepovoskore'

Jde o tzv. alias, ve výsledku bude sloupec nazvan 'lepsich' misto 'count(*)'
peta
Profil
Dik, taky mne to napadlo, jen jsem si nebyl jist, zda to funguje i bez toho AS, takze jsem si pockam na vysvetleni zkusenejsich. Se proste drzim zapisu podle phpmyadmina, pokud to jde.
peta
Profil
Nj, ale mato 1 chybu:
pepa ma skore=20
dalsich 30 lidi ma skore = 20, skore=19 a skore = 21
Jake presne poradi ma pepa?
At uz > nebo >= to nerozlisi, ktery v poradi je pepa treba podle pridani do tabulky (ID)

Ha, jasne, omezim to na nick!=pepa :)
Nn, stale to neni ono, stale mi to vybere 29/30 stejnych hodnoceni a pepa muze byt na prvni strane.
peta
Profil
nasel jsem ted toto:
12,9,9,9,8,8,7,6,5

Nyni muzeme pouzit nasledujici funkce:

* ROW_NUMBER() OVER (ORDER BY Plat DESC) - je nejjednodussi a vrati 1,2,3,4,5,6,7,8,9
* RANK() OVER (ORDER BY Plat DESC) - vrati poradi jako 1,2,2,2,5,5,7,8,9
* DENSE_RANK() OVER (ORDER BY Plat DESC) - vrati poradi jako 1,2,2,2,3,3,4,5,6
* NTILE(3) OVER (ORDER BY Plat DESC) - rozdeli hrace do tri stejnych skupin podle prijmu, tudiz vrati 1,1,1,2,2,2,3,3,3

Coz je stejne.

Hm, asi to budu muset dat do pomocne tabulky a pak jen vytahnu cislo ID radku.
Teda prrr, mozna ROW_NUMBER, prostuduju.
peta
Profil
Tak myslim, ze to mam, 2 dotazy a je po problemu:
$dotaz = "SELECT * FROM $tab WHERE `question` LIKE '$find1%' LIMIT 1";
$score = $row['voteAB'];
$word = $row['question'];
$dotaz = "SELECT COUNT(*) AS `rowID` FROM $tab WHERE `voteAB`>'$score' OR (`voteAB`='$score' AND `question`<'$word')";
Stacilo jen spravne podminky
Toto téma je uzamčeno. Odpověď nelze zaslat.

0