Seite 1 von 2
Counter mit Ranking
Verfasst: 07.08.2007 15:37
von Arzee
Hallo Leute,
jeder kenn das doch:
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?
Verfasst: 07.08.2007 19:30
von gn#36
Verfasst: 07.08.2007 19:57
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.
Verfasst: 07.08.2007 20:06
von Pyramide
Lass MySQL doch einfach zählen, wieviele Arbeiter mehr verdienen als der, dessen Position in der Bestenliste du wissen willst...
Verfasst: 07.08.2007 20:10
von Arzee
So, habs geschaft.
Großen Dank an alle
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
Verfasst: 07.08.2007 20:20
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
Verfasst: 07.08.2007 20:39
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.
Verfasst: 07.08.2007 21:07
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
Verfasst: 07.08.2007 21:09
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...
In deinem Code von oben fehlt übrigens die
Fehlerbehandlung.
Verfasst: 08.08.2007 12:00
von Arzee
Danke an alle
Keine weiteren Fragen
