Counter mit Ranking

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Arzee
Mitglied
Beiträge: 23
Registriert: 17.06.2007 14:34

Counter mit Ranking

Beitrag von Arzee »

Hallo Leute,
jeder kenn das doch:

Code: Alles auswählen

SELECT * FROM tabelle ORDER BY punkte
dann liest er alle Daten aus, und man kann die nummerieren.

Aber was ist wenn ich sagen wir mal nur ein Wert raushollen will, aber der muss die gleiche Nummer haben wie wenn ich die alle rausgelesen hätte und nummeriert.

Wie kann ich das anstellen?
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

Such mal nach LIMIT...

Code: Alles auswählen

SELECT * FROM tabelle WHERE xy ORDER BY z LIMIT 50, 1
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Arzee
Mitglied
Beiträge: 23
Registriert: 17.06.2007 14:34

Beitrag von Arzee »

Soweit ich weiß schränkt doch LIMIT ein Ergebnis nur ein, wenn ich zBsp nur 50 Ausgaben haben will, aber er zählt die nicht.

Sagen wir mal ich habe eine Datenbank einer Firma, da stehen die Angestellten drin. Nun will ich wissen wieviel jeder verdient und eine Liste ausgeben wer am meisten und wer am wenigsten verdient, und dazwischen.
Und dann will ich wissen an welcher Position der Angestellte xy steht.

Klar man könnte es ja so machen:

Code: Alles auswählen

$sql = mysql_query("SELECT * FROM Arbeiter ORDER BY Lohn");
$i=1;
while($row = mysql_fetch_assoc($sql)){
    if($row['Name']=='Hans'){ $position = $i; }
    $i++;
}
Aber kann man auch eine Schleife umgehen und gleich die Position auslesen ohne das erst alle ausgelesen werden müssen?
Ich will ja nicht jedesmal alles durchlaufen nur um die Position einer Person rauszufinden.
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Lass MySQL doch einfach zählen, wieviele Arbeiter mehr verdienen als der, dessen Position in der Bestenliste du wissen willst...
KB:knigge
Arzee
Mitglied
Beiträge: 23
Registriert: 17.06.2007 14:34

Beitrag von Arzee »

So, habs geschaft.

Großen Dank an alle :D

Code: Alles auswählen

mysql_result(mysql_query("SELECT COUNT(*) FROM Seite WHERE views>( SELECT views FROM Seite WHERE url='www.domain.de')"),0);
Wenn es noch andere Möglichkeiten gibt, dann stellt die vor. Würde mich freuen
Zuletzt geändert von Arzee am 07.08.2007 20:21, insgesamt 1-mal geändert.
Benutzeravatar
Mahony
Ehemaliges Teammitglied
Beiträge: 12209
Registriert: 17.11.2005 22:33
Wohnort: Ostfildern Kemnat
Kontaktdaten:

Beitrag von Mahony »

Hallo
Den höchsten Wert einer Spalte ermitteln:

Code: Alles auswählen


SELECT MAX(spalten_name) AS spalten_name
FROM tabellen_name;

SELECT MAX(Gehalt) AS Gehalt
FROM Personal;
Zeigt das höchste Gehalt an

Durchschnitt einer Gruppe ermitteln:

Code: Alles auswählen

SELECT spalten_name, AVG(spalten_name)
FROM tabellen_name
GROUP BY spalten_name;

SELECT Rang, AVG(Gehalt)
FROM Personal
GROUP BY Rang;
Zeigt die durchschnittlichen Gehälter der einzelnen Ränge an.



Grüße: Mahony
Wer fragt, ist ein Narr für fünf Minuten, wer nicht fragt, ist ein Narr für immer.
Arzee
Mitglied
Beiträge: 23
Registriert: 17.06.2007 14:34

Beitrag von Arzee »

Jetzt hab ich leider ein anderes Problem, wenn ich die Position auslesen will und mehrere haben den gleichen Wert dann haben die auch die selbe Position, wär ja nicht schlimm wenn er dann nicht ein paar Positionen überspringen würde.

Wie kann ich das beseitigen? Ich habe 3 mal die Nummer 4 aber 5 und 6 gar nicht. Dann fängt es bei 8 weiter an zu zählen.
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

Vielleicht stattdessen so:

Code: Alles auswählen

mysql_result(mysql_query("SELECT COUNT(*) FROM Seite WHERE views>( SELECT DISTINCT views FROM Seite WHERE url='www.domain.de')"),0);
Irgendwie finde ich ein Subquery ist aber sowieso nicht das wahre, vielleicht besser in etwa so:

Code: Alles auswählen

SELECT 
COUNT(*) AS count,
s2.url
FROM 
Seite s1, Seite s2
WHERE 
s1.views > s2.views 
AND 
s2.url = 'www.xy.de'
GROUP BY s2.url
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Naja im Prinzip ist die Zählung ja richtig so - schließlich ist der auf dem 4. Platz ja der viertbeste, weil noch drei vor ihm sind - und nicht der zweitbeste, nur weil es drei erstplatzierte gibt. Aber wenn du unbedingt die andere Zählweise willst...

Code: Alles auswählen

SELECT COUNT(DISTINCT spalte) ...
In deinem Code von oben fehlt übrigens die Fehlerbehandlung.
KB:knigge
Arzee
Mitglied
Beiträge: 23
Registriert: 17.06.2007 14:34

Beitrag von Arzee »

Danke an alle

Keine weiteren Fragen :D
Antworten

Zurück zu „Coding & Technik“