Unmögliche SQL-ANfrage ?!
-
Hi,
ich will folgendes raalissieren:
Habe eine Tabelle mit etwa. 30.000 (oder noch mehr) Einträgen. Die Tabelle behinhaltet das Feld "points", "id",..usw.
Nun will ich in einer preformance freundlichen Abfrage die "Rang" liste in der Tabelle ermitteln. ( ORDER BY points DESC ).
ISt es auch gleichzeitig möglich die daten von dieser bestimmten ID auszulesen ?Wie ist das möglichlich... BZW: ist das möglich
Mfg
-
Von welcher bestimmten Id? Von der die am höchsten ist? Die am niedrigsten ist? Da gibt es einfachere Wege als alle Elemente mittels ORDER BY zu sortieren und dann das erste zu wählen.
Aber spezifizier nochmals genauer was du eigentlich willst
MfG SideWinder
-
@SideWinder, so wie ich ihn verstanden habe ist es eine unsortierte ´Highscoreliste, welche er nach Punkten aufsteigend bzw. absteigend sortiert selektieren will.
@JayJay, probiers mal so:
SELECT id, points FROM <tabelle> ORDER BY points <auf/absteigend>
-
JayJay schrieb:
ISt es auch gleichzeitig möglich die daten von dieser bestimmten ID auszulesen?
Meinst du vielleicht damit den Rang einer bestimmten ID zu ermitteln?
Wenn ja versuchs mal damit.SELECT count(id) as getrang FROM <tabelle> WHERE points>'<userpoints>' ORDER BY points DESC
-
Hi
erstmal Danke für die Antworten, aber das bringt mich in diesem Fall nciht weiter:
Ich erklähr nochmal was ich haben will:
Ich habe ein Hightscore-liste...
Nun habe ich eine ID von einem User:Jetzt will ich mit einer Mysql Abfrage den Rang (bezüglich der punkte) abfragen indem er mir die user nach den punkten sortiert und mir die Stelle zuzrück gibt(rang) an dem sich der user befindet..
Oder die anzahl der Einträge die sortiert davor stehen ..Ciao
-
SELECT anz(*)+1 as rang FROM tabelle WHERE punkte>(SELECT punkte FROM tabelle WHERE player_id=SPIELER);
MfG SideWinder
-
Hm, funktioniert nicht, kommt ein syntax fehler!
Darf ich den. 2 Teil in der Where klausel einfach so verwenden ??
LECT COUNT(*) AS rank FROM mlc_members AS mem WHERE punkt> (SELECT punkte,id FROM mlc_members WHERE id=1000 )
Ciao
-
Welchen Fehler bekommst du denn? Wo tritt der Fehler auf? Ich hab hier keine Tabellen zum Testen.
MfG SideWinder
-
umgehen wir das subselect doch ganz elegant mit 2 queries:
select @score:=score from table where id=10000
select count(*) from table where score>@score
-
Finde ich imho weniger elegant
BTW: Was genau ist an meinem Query jetzt falsch? Würde mich interessieren. Außer count/anz, etc.
MfG SideWinder
-
SideWinder schrieb:
BTW: Was genau ist an meinem Query jetzt falsch? Würde mich interessieren. Außer count/anz, etc.
ka, ich meide Subselects momentan noch, mal sehen wie gut die nächsten MySQL Versionen optimieren - hatte nämlich ein paar Performance Probleme mit Subselects -> deshalb nehme ich lieber 2 kleine Queries -> da kann er nix falsch machen
-
Also mit "@" kann ich in meinem Query mit Variablen arbeiten ??
Oder was wird damit gemacht ?
-
funtzt wieder nicht
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT COUNT(*) FROM mlc_members WHERE points>@points' at line
$id=1; $sql_query = "SELECT id,@points:=points FROM mlc_members WHERE id=$id "; $sql_query .= "SELECT COUNT(*) FROM mlc_members WHERE points>@points "; $qre = $g_cMysql->Query( $sql_query ); echo mysql_error();
-
@JayJay redest du von SQL oder von mySQL?
Bei mySQL sind doch garkeine Subselect zulässig oder haben die
das seit version 4 geändert?
-
Hier nochmal die 2 Querys:
SELECT points FROM mlc_members WHERE id='$id'
SELECT count(id)+1 as getrang FROM mlc_members WHERE points>'$points' ORDER BY points DESC
Sorry für das 2. posting, falscher Button.
-
Hi,
sry dachte, dass Mysql - SQL soweit im Query gleich sind..
@2oopuls:
Gibt es dafür nicht in einem Query ?
-
@JayJay, die Syntax von sql und mysql ist schon verschieden.
Mir ist noch eine Möglichkeit eingefallen. Du kannst es versuchen,
wenn du einen join auf ein und die selbe Tabelle machst.SELECT t1.points, count(t2.points)+1 AS rang FROM mlc_members AS t1, mlc_members AS t2 WHERE t1.id='$id' AND t2.points>t1.points GROUP BY t1.id ORDER BY t2.points
Ich hab das grad mal getestet, bei mir funktioniert es. Jetzt übergibst
du nur die $id und als ausgabe erhälst du die punkte und den rang des
Users.Gruss Frank
Edit:
Das GROUP BY wäre zwar nicht erforderlich, da die User sowieso eine
eindeutige id haben aber mySQL verlangt ein GROUP um den COUNT auszuführen.