Index
    Tactical Enforcement Group
        Tactical Enforcement Group - Public
            Eine MySQL-Query soll es sein ...
  Login ] [ Registrieren ]  [ Setup ]  [ Hilfe ]  [ Suchen ]

unregistriert ] 22.12.2025 - 00:19:40
Jump to first new ]

Autor Thema: Eine MySQL-Query soll es sein ...
>1< [ 2 ]
05.10.2003 - 18:55:43
#0001

XCS CptnKiff
Fleet Admiral

CptnKiff ist offline!!

new


MySQL-Experten vor:

ich habe eine tabelle mit daten (oh wunder!), in diesem fall sind es quizpunkte von meinem irc-quizbot. diese tabelle möchte ich sortieren und danach wissen, an welcher rangposition sich ein bestimmter datensatz befindet.

meine bisherigen lösungen, mit denen ich aber nicht zufrieden bin:

1.) tabelle sortieren, danach sequentiell auslesen, bis ich zufällig den gesuchten datensatz auslese. bei jedem lesevorgang setze ich eine zählvariable eins rauf, so dass mir diese variable den rang anzeigt, sobald der datensatz gefunden wurde.

2.) zusätzlich spalte "rang" einführen. diese spalte müsste aber bei jeder punktevergabe überprüft/aktualisiert werden.

ich suche nach einer einfachen query, also sowas wie "SELECT RANK(spalte="WERT") FROM table SORT BY spalte" nur dass es die RANK-Funktion leider nicht gibt :(


[ ]

05.10.2003 - 19:45:28
#0002

TTL Garmon
Fleet Captain
Garmon ist offline!!

new


ohje, das selbe/aehnliche problem hatte ich imo bei den "most played maps" auf der clanseite, ich hab leider nie ne "anstaendige" moeglichkeit gefunden, nur die von dir genannte 2te moeglichkeit oder ueber ne schleife, die aber imo viel zu aufwenidg war fuer die "kleine" sache.

naja, vielleicht kommt ja noch nen mysql guru der dir weiter helfen kann :)




[ ]

05.10.2003 - 19:46:48
#0003

TEG white-
Fleet Admiral

white- ist offline!!

*ist immer schuld*

new


erstens wenn wenig Lesevorgaenge zu erwarten sind oder 2. wenn du viel lesen willst. Lieber eimal reorganisieren dann aber die Daten schnell lesen koennen als fuer jeden Lesevorgang alles reorganiesieren muessen. Bei solchen grossen Updateaktionen nicht den LOCK vergessen, sonst kanns passieren das alles durcheinander kommt.

Ich glaube nicht das du es einfach mit einem Query rausbekommst.


cya later
/white-

--
"There are only 10 types of people in the world: Those who understand binary, and those who don´t."

allround daredevil
Tactical Enforcement Group


[ ]

05.10.2003 - 19:59:52
#0004

TEG white-
Fleet Admiral

white- ist offline!!

*ist immer schuld*

new


@garmon
most played maps sollte doch aber nicht so schwer sein oder? Bei uns ist es so das es fuer jedes match einen row gibt. Und da ein feld map1, map2 map3. Ich weis das ist doof, aber ist halt schon steinalt


SELECT
    count(map1) AS cnt, map1
FROM
    matches
GROUp BY
    map1 ORDER BY cnt DESC
LIMIT 5;


das wuerde dir die Top5 geben. Allerdings nur fuer map1. In einer ordentlichen Tabelle waere aber fuer jede Map eine Row. Also geh ich mal von aus das bei dir so ist


cya later
/white-

--
"There are only 10 types of people in the world: Those who understand binary, and those who don´t."

allround daredevil
Tactical Enforcement Group


[ ]

05.10.2003 - 20:06:32
#0005

TTL Garmon
Fleet Captain
Garmon ist offline!!

new


@white hmm, hast recht *grummel*. hab aber natuerlich auch keine anstaendigen tabellen und map1,map2,map3 in einer reihe :P
oehm, oder hab ich das mal geaendert *unsicher ist* ach auch egal, die seite ist eh down *G*


@ kiff:vielleicht hilft das weiter



[ ]

05.10.2003 - 21:53:18
#0006

XCS CptnKiff
Fleet Admiral

CptnKiff ist offline!!

new


vielen dank für eure antworten :)

garmon: mysql_row_SEEK (nicht tell) scheint in etwa das zu sein, was ich brauche. leider ist die API nur für C und nicht für PHP (worin ich den bot schreibe). vermutlich tut die funktion ohnehin nur das, was ich unter 1.) beschrieben hatte. also einfacher zu programmieren, aber immer noch genauso performanceintensiv ...


[ ]

05.10.2003 - 23:20:48
#0007

otaku Spinner
Fleet Admiral

Spinner ist offline!!

new


erm, gibts RANK() echt net... dacht das wär SQL und da gibts RANK() nämlich mit sicherheit.

mfg Spinner


[ ]

05.10.2003 - 23:26:58
#0008

TEG white-
Fleet Admiral

white- ist offline!!

*ist immer schuld*

new


es gibt die funktion mysql_data_seek() was warscheinlich ein wrapper auf die aus der C API ist. Allerdings nuetzt die auch das nix. Da es wie in de Docu auch steht nur der Zeiger auf ein Element des Results gesetzt wird.

Was rank() in SQl macht weis ich nicht ;) ist das SQL92 oder irgendein Psydosstandard?


cya later
/white-

--
"There are only 10 types of people in the world: Those who understand binary, and those who don´t."

allround daredevil
Tactical Enforcement Group


[ ]

06.10.2003 - 09:18:42
#0009

TEG Snoopy
Fleet Admiral

Snoopy ist offline!!

*Beagel vom Dienst*

new


Ich weiß ja nicht, ob ich das Problem richtig verstanden habe, aber der Rang ergibt sich doch daraus, wieviele vorhanden sind, die mehr Punkte haben. Ergo reicht doch ein einfacher Count() mit Where Punkte > eigene Punkte. ggf. noch um 1 erhöhen oder erniedrigen.

select count()
from blabla
where Punkte > :eigenePunkte


[ ]

06.10.2003 - 10:14:34
#0010

XCS CptnKiff
Fleet Admiral

CptnKiff ist offline!!

new


snoopy: das funzt tatsächlich! du bist ein genie!


[ ]

>1< [ 2 ]
 



Kontakt | TEG CLAN PAGE

Powered by Whiteman www.teg-clan.de © 2000
PHP - Forum Version Beta 1