ORDER BY sortiert falsch
Marco
- datenbank
0 Marco2 bert0 Marco0 Frank (no reg)0 Marco0 Marco0 ChrisB0 Marco
0 Frank (no reg)0 Marco
Hallöchen,
ich habe ein Problem mit der Sortierung von ORDER BY
Meine Abfrage lautet:
SELECT feld1, feld2, feld3, feld4 FROM tabelle1, tabelle2 WHERE tabelle1.pid = tabelle2.pid ORDER BY feld1, feld2, feld3 DESC
Und hier nochmal ORIGINAL:
SELECT goldStar, silverStar, bronzeStar, nick FROM stat_playerAwardMedals, stat_playerAtt WHERE stat_playerAwardMedals.pid = stat_playerAtt.pid ORDER BY goldStar, silverStar, bronzeStar DESC
Ausgegeben wird es mir so:
Ich habe keine Ahnung was ich falsch mache.
Eig. sollte er das so ausgeben:
feld1 feld2 feld3 feld4
10 10 10 user1
9 9 9 user2
8 8 8 user3
7 7 7 user4
usw.
Er sortiert aber nach ASC und denn auch noch Falsch.
Ich hoffe ihr habt eine Idee, was ich da Falsch mache.
Vielen Dank
mfg Marco
SRY, habe vergessen meine MYSQL Version einzufügen.
MySQL - 5.0.32-Debian_7etch10-log
mfg
Marco
Er sortiert aber nach ASC und denn auch noch Falsch.
Wieso falsch? Er sortiert nach ASC, und das macht er richtig. Da du leider keine Eintreäge hast, wo gold gleichoft vergeben ist... somit kann die zweite Sortierregel niemals eintreffen...
Außerdem musst du ASC und DESC jedes mal vergeben, da sonst standardmäßig ASC verwendet wird:
hi,
Wieso falsch? Er sortiert nach ASC, und das macht er richtig. Da du leider keine Eintreäge hast, wo gold gleichoft vergeben ist... somit kann die zweite Sortierregel niemals eintreffen...
Achso...
Und wie bekomme ich jetzt alle 3 Felder sortiert?
Vielen Dank
mfg Marco
Und wie bekomme ich jetzt alle 3 Felder sortiert?
naja, (wurde ja schon geschrieben)
ORDER BY
feld1 ASC,
feld2 DESC,
feld3 ASC,
feld4 DESC
Cheers, Frank
hi,
naja, (wurde ja schon geschrieben)
ORDER BY
feld1 ASC,
feld2 DESC,
feld3 ASC,
feld4 DESC
das dachte ich auch. Nur leider kommt da das gleiche Ergbenis raus.
SELECT feld1, feld2, feld3, feld4 FROM tabelle1, tabelle2 WHERE tabelle1.pid = tabelle2.pid ORDER BY feld1 DESC, feld2 DESC, feld3 DESC
Also es wird wieder nur feld1 Sortiert.
mfg Marco
Also du Sortierung ist noch nicht ganz richtig.
Hi,
Also du Sortierung ist noch nicht ganz richtig.
KLICK MICH
Sagst du uns bitte auch noch, wo das der Fall sein soll?
MfG ChrisB
Hi,
Also du Sortierung ist noch nicht ganz richtig.
KLICK MICHSagst du uns bitte auch noch, wo das der Fall sein soll?
Klar...
mfg Marco
Alles läuft richtig, das SQL ist richtig, MySQL interpretiert es auch korrekt .... lediglich du hast eine andere Logik. Warum sollten denn eis-tee92 und dark_voodoo026 andersherum ausgegeben werden?
Die Sortierung entscheidet sich bereits durch das Feld goldStar ...
Frank
Alles läuft richtig, das SQL ist richtig, MySQL interpretiert es auch korrekt .... lediglich du hast eine andere Logik. Warum sollten denn eis-tee92 und dark_voodoo026 andersherum ausgegeben werden?
Das soll eine Memberstatistik werden.
Ich möchte einfach nur, das die Felder goldStar, silverStar, bronzeStar einzelnt sortiert werden.
Sprich:
Feld : goldStar
10
9
8
7
6
5
4
3
2
1
Feld: silverStar
10
9
8
7
6
5
4
3
2
1
Feld: bronzeStar
10
9
8
7
6
5
4
3
2
1
Jedes Feld soll sortiert werden.
mfg Marco
Aha, also ein "Ranking" pro Spalte. "User X" liegt auf Platz 8 bei goldStar und auf Platz 10 bei bronzeStar. usw. Dann schau mal, ob dein DBMS solche Ranking-Funktionen unterstützt, imho gibts da nix in mySQL out-of-the-box.
Demnach hast du die Möglichkeiten:
Cheers, Frank
Aha, also ein "Ranking" pro Spalte. "User X" liegt auf Platz 8 bei goldStar und auf Platz 10 bei bronzeStar. usw. Dann schau mal, ob dein DBMS solche Ranking-Funktionen unterstützt, imho gibts da nix in mySQL out-of-the-box.
Demnach hast du die Möglichkeiten:
- akzeptieren, wie es ist mit der Sortierung momentan
- eine eigene Ranking Funktionalität bauen (könnte unter mySQL etwas tricky sein, daher vielleicht eher mit PHP)
Und wie kann ich es mit PHP sortieren. So sieht meine PHP Datei aus.
<?php
$ergebnis=mysql_query("SELECT goldStar, silverStar, bronzeStar, nick FROM stat_playerAwardMedals, stat_playerAtt WHERE stat_playerAwardMedals.pid = stat_playerAtt.pid ORDER BY goldStar DESC");
?>
//Goldmedaille
<table width="100%" border="1">
<?php
$nummer = 1;
while ($row = mysql_fetch_assoc($ergebnis)) {
echo '<tr>';
echo '<td>'.$nummer++.'</td>'."\n";
echo '<td>'.$row['goldStar'].'</td>'."\n";
echo '<td>'.$row['nick'].'</td>'."\n";
echo '</tr>';
}
?>
</table>
//Silbermedaille
<table width="100%" border="1">
<?php
$nummer = 1;
mysql_result($ergebnis, silverStar);
while ($row = mysql_fetch_assoc($ergebnis)) {
echo '<tr>';
echo '<td>'.$nummer++.'</td>'."\n";
echo '<td>'.$row['silverStar'].'</td>'."\n";
echo '<td>'.$row['nick'].'</td>'."\n";
echo '</tr>';
}
?>
</table>
//Bronzemedaille
<table width="100%" border="1">
<?php
$nummer = 1;
mysql_result($ergebnis, bronzeStar);
while ($row = mysql_fetch_assoc($ergebnis)) {
echo '<tr>';
echo '<td>'.$nummer++.'</td>'."\n";
echo '<td>'.$row['bronzeStar'].'</td>'."\n";
echo '<td>'.$row['nick'].'</td>'."\n";
echo '</tr>';
}
?>
</table>
Wie wende ich darauf jetzt zb. sort() an?
Vielen Dank
mfg Marco
Hi,
Ich möchte einfach nur, das die Felder goldStar, silverStar, bronzeStar einzelnt sortiert werden.
Du willst also nicht eine Abfrage mit 3 Sortierungen, sondern 3 Abfragen mit je einer Sortierung.
cu,
Andreas
Hi,
Ich möchte einfach nur, das die Felder goldStar, silverStar, bronzeStar einzelnt sortiert werden.
Du willst also nicht eine Abfrage mit 3 Sortierungen, sondern 3 Abfragen mit je einer Sortierung.
Richtig, aber alles in einem query
mfg Marco
Hi,
Du willst also nicht eine Abfrage mit 3 Sortierungen, sondern 3 Abfragen mit je einer Sortierung.
Richtig, aber alles in einem query
UNION
MfG ChrisB
Nun, hast du es jetzt oder was willst du denn genau erreichen, der erstes Wunschbeispiel mit 10 10 10 ist ein bisschen zu banal.
ein ~~~sql
ORDER BY
feld1 DESC,
feld2 DESC
sortiert alle Datensätze zuerst nach "feld1" absteigend, dann für alle Datensätze, die einen gleichen Wert für "feld1" haben absteigend nach feld2 usw.
Frank
hi,
Nun, hast du es jetzt oder was willst du denn genau erreichen, der erstes Wunschbeispiel mit 10 10 10 ist ein bisschen zu banal.
ein ~~~sql
ORDER BY
feld1 DESC,
feld2 DESC
>
> sortiert alle Datensätze zuerst nach "feld1" absteigend, dann für alle Datensätze, die einen gleichen Wert für "feld1" haben absteigend nach feld2
Ich möchte das er jeden Feld für sich sortiert.
Also nicht nach einander und auch nicht nur dann wenn gleiche da sind.
mfg Marco
Ich möchte das er jeden Feld für sich sortiert.
und was soll da dann rauskommen? das kann nicht gehen. Dann wüsste die Datenbank nicht, an welcher Stelle es den Datensatz nun liefern soll, für goldStar käme er an 10. Stelle für silverStar an 15. und für bronzeStar an 4. Wie würdest du denn dann entscheiden?
Du möchtest vielleicht lieber ein sogenanntes "Ranking" pro Spalte erstellen. Damit bekommst du aber auch nur wieder andere Zahlen, mit denen du dasselbe Problem haben wirst.
Oder du möchtest vielleicht ein gewichtetes "Gesamtranking" (mit sog. tie-breaker) machen. Das ginge, indem du z.b. goldStar die doppelte Wertigkeit (z.b. 6 Punkte) gibst als silverStar (3 Punkte) und die 6fache Wertigkeit von bronzeStar gibst:
ORDER BY (goldStar*6 + silverStar*3 + bronzeStar*1) DESC
Das ist nicht ganz trivial und nur eine von schier Millionen von Möglichkeiten.
Die NULL-Werte bekommst du raus, indem du die Funktion COALESCE(feld, surrogatwert_wenn_null) anwendest.
Cheers, Frank
und was soll da dann rauskommen? das kann nicht gehen. Dann wüsste die Datenbank nicht, an welcher Stelle es den Datensatz nun liefern soll, für goldStar käme er an 10. Stelle für silverStar an 15. und für bronzeStar an 4. Wie würdest du denn dann entscheiden?
Du möchtest vielleicht lieber ein sogenanntes "Ranking" pro Spalte erstellen. Damit bekommst du aber auch nur wieder andere Zahlen, mit denen du dasselbe Problem haben wirst.
Richtig es soll ein Ranking werden.
Ganz unten siehst du die Medaillen GOLD, SILBER und BRONZE.
Geh mal mit der Maus drüber, dann siehst du mein Ranking.
Nur wie bekomme ich das jetzt sortiert?
mfg Marco
Hi,
Ganz unten siehst du die Medaillen GOLD, SILBER und BRONZE.
Geh mal mit der Maus drüber, dann siehst du mein Ranking.Nur wie bekomme ich das jetzt sortiert?
https://forum.selfhtml.org/?t=192387&m=1283881
MfG ChrisB