Forum Doku Wiki Blog

Forumsarchiv 2007, Mai
Problem mit Highscore Liste

archivierte Beiträge lesen

  1. (DATENBANK) Problem mit Highscore Liste von Alexander198, 16. 05. 2007, 18:34

Problem mit Highscore Liste

Der folgende Beitrag wurde am 16. 05. 2007, 18:34 Uhr von Alexander198 veröffentlicht.

Hallo, alle Zusammen.

Ich habe ein kleines Problem und zwar folgendes:
Ich habe eine Tabelle: benutzer_bilder, diese Tabelle beinhaltet

user_id , pfad_zum_bild, sex, votein, voteout, voteresult .

(jeder Benutzer darf maximal. 16 Fotos hochladen) also sind mehrere Fotos von einer Person in der Datenbank enthalten.

Wobei voteresult sich aus votein und voteout zusammensetzt
voteresult = (votein / voteout) * 100

Jetzt möchte ich eine Top10 Liste erstellen, die mir eine Tabelle nach den höchsten Prozenten ausgibt.

Ich hab das soweit hinbekommen, bloss das Problem jedoch ist, dass ständig falsche "Bilder"==> pfad_zum_bild anzeigt werden.

Ich habe folgende SQL:
SELECT MAX(voteresult) AS SCORE, user_id, pfad_zum_bild,votein,voteout, sex FROM bilder_user WHERE sex = 1 and voteout >= 80 ORDER BY SCORE DESC LIMIT 10

wie gesagt, es kommt 2mal vor, falsche pfad_zum_bild angezeigt werden. Ich verstehe nicht warum!!!

Kann mir da eventuell jemand helfen?? Würde mich riesig freuen, danke Alexander

Problem mit Highscore Liste

Der folgende Beitrag wurde am 16. 05. 2007, 20:24 Uhr von King^Lully veröffentlicht.

> Wobei voteresult sich aus votein und voteout zusammensetzt
> voteresult = (votein / voteout) * 100

> Ich habe folgende SQL:
> SELECT MAX(voteresult) AS SCORE, user_id, pfad_zum_bild,votein,voteout, sex FROM bilder_user WHERE sex = 1 and voteout >= 80 ORDER BY SCORE DESC LIMIT 10

Vielleicht habe ich Dich nicht ganz richtig verstanden, aber Du hast ein voteresult, das immer schön berechnet in den Tabelle "Bilder" liegt. Warum gehst Du dann mit Deiner Abfrage auf die Tabelle "User"?

MySQL, GROUP BY und versteckte Spalten

Der folgende Beitrag wurde am 16. 05. 2007, 20:30 Uhr von Vinzenz Mai veröffentlicht.

Hallo Alexander,

> Ich habe ein kleines Problem und zwar folgendes:

dass Du MySQL benutzt :-)

> Ich habe eine Tabelle: benutzer_bilder, diese Tabelle beinhaltet
> user_id , pfad_zum_bild, sex, votein, voteout, voteresult .

> Ich hab das soweit hinbekommen, bloss das Problem jedoch ist, dass ständig falsche "Bilder"==> pfad_zum_bild anzeigt werden.

Nein, nein - das siehst Du falsch. Es sind zulässige "Bilder".

> Ich habe folgende SQL:
> SELECT MAX(voteresult) AS SCORE, user_id, pfad_zum_bild,votein,voteout, sex FROM bilder_user WHERE sex = 1 and voteout >= 80 ORDER BY SCORE DESC LIMIT 10

was nur MySQL durchgehen läßt. Jedes andere mir bekannte Datenbankmanagementsystem wird dieses Statement als fehlerhaft zurückweisen.

> wie gesagt, es kommt 2mal vor, falsche pfad_zum_bild angezeigt werden. Ich verstehe nicht warum!!!

Nochmals: Es werden erlaubte Daten angezeigt. Das MySQL-Handbuch beschreibt dieses Verhalten ganz genau. Deswegen darf man dieses Verhalten, Dein Statement zu akzeptieren, auch nicht als Bug bezeichnen:

In Abschnitt GROUP BY mit versteckten Feldern kannst Du lesen:

<zitat>
MySQL erweitert die Verwendung von GROUP BY  dahingehend, dass Sie Spalten oder Berechnungen in der SELECT-Liste verwenden können, die nicht in der GROUP BY-Klausel erscheinen. Dies steht für „ein beliebiger Wert für diese Gruppe“

[...]

Verwenden Sie diese Funktion nicht, wenn die Spalten, die Sie im GROUP BY-Anteil weglassen, in der Gruppe nicht eindeutig sind! Sie erhalten ansonsten nicht vorhersehbare Ergebnisse.
</zitat>

Bei Dir sind offensichtlich die Spalten nicht eindeutig, Du erhältst unvorhersehbare Ergebnisse - und damit nicht die, die Du gerne hättest.
Und bei Dir sind _alle_ Spalten außer der ersten in diesen versteckten Spalten, da ich in Deinem Statement keine GROUP-BY-Klausel entdecken konnte.

Meistens kann man Dein Problem mit einer korrelierten Unterabfrage (MySQL 4.1 und neuer) lösen. Wie das geht, kannst Du in einem meiner Archivpostings nachlesen.


Freundliche Grüße

Vinzenz

MySQL, GROUP BY und versteckte Spalten

Der folgende Beitrag wurde am 16. 05. 2007, 20:46 Uhr von King^Lully veröffentlicht.

> > Ich habe folgende SQL:
> > SELECT MAX(voteresult) AS SCORE, user_id, pfad_zum_bild,votein,voteout, sex FROM bilder_user WHERE sex = 1 and voteout >= 80 ORDER BY SCORE DESC LIMIT 10
>
> was nur MySQL durchgehen läßt. Jedes andere mir bekannte Datenbankmanagementsystem wird dieses Statement als fehlerhaft zurückweisen.

Wobei sich (mir ;) noch die Frage stellt warum er nicht einfach absteigend nach voteresult sortiert (oder ohne JOIN auskommt).

© 1998-2013 SELFHTMLImpressumSoftware: Classic Forum 3.4