[PHP & MySQL]: Ausgabe von Tabellen-Inhalt und Sortierung

keymaker

Active member
ID: 72745
L
29 September 2007
34
0
Hi Leute,
ich habe ein kleines Problem, und weiß nicht wie ich das am besten lösen kann, da ich mich "noch" nicht so gut mit PHP & MySQL auskenne.
In Tabelle A habe ich Informationen über einen User drin, die möchte ich gerne ausgeben.
In Tabelle B habe ich bewertungen von den einzelnen Usern, die erst zusammen gezählt werden müssen.

Wenn ich Tabelle A ausgebe, soll es aber nach den Bewertungen (Tabelle B ) sortiert werden. 1.00 ganz oben , 6.00 ganz unten.

Danke im Voraus.
Wünsche euch einen schönen Tag.

Gruss
Steffen
 
Zuletzt bearbeitet:
Code:
SELECT users.userid, users.username, (SELECT SUM(punkte.value) FROM punkte WHERE punkte.userid = users.userid) as punkte
FROM users
ORDER BY punkte DESC
Da müssten logischerweise noch die Feld und Tabellennamen getauscht werden. ;)

Würde alle User selektieren, in einer Subquery die zusammengezählten Punkte und das ganze dann nach der Anzahl der Punkte rückwärtig sortieren.
Meintest du das so?

Für solche Sachen empfehle ich dir die MySQL-Doku. ;)
 
Hi,
dank dir, mal schauen ob ich das so umschreiben kann :)

Man kann die User bewerten zwischen Note 1 - 6 ...
Alle Bewertungen werden einzeln in die Datenbank geschrieben z.b.
Userid | BW
1 | 3
2 | 2
1 | 3
1 | 2
2 | 4

Im Profil kann ich es normal ausgeben für USERID: 1 BW-Durchschnitt: 2,66 ; Userid: 2 BW-Durchschnitt: 3,00
( Userid 1 auf Platz 1 und Userid auf Platz 2 )

Jetzt wollte ich gerne alle Users ausgeben, die nach dem BW-Durchschnitt sortiert werden von 1,00 absteigend bis 6,00 ...

Danke.
Gruss
Steffen
 
versuch mal:

SELECT USERID , AVG(BW)
FROM bewertung
GROUP BY USERID
ORDER BY 2 ;


wenn Du statt der UserID den Usernamen willst, dann musst Du die zweite Tabelle dazujoinen.

SELECT USERNAME , AVG(BW)
FROM users INNER JOIN bewertung
ON users.USERID = bewertung.USERID
GROUB BY USERNAME
ORDER BY 2
 
Zuletzt bearbeitet:
Danke für eure Lösungen.
Es geht einwandfrei. So steht es jetzt in meiner Abfrage:

SELECT *,(SELECT AVG(honb.bw) FROM honb WHERE honb.userid = hon.userid) AS `bwe` FROM hon $mdatenbankwherem GROUP by `bwe` ASC LIMIT 10

Jetzt muss ich nur noch irgendwie reinbasteln das alle User nicht ausgegeben werden mit einer Bewertungen mit 0 oder 0.00 ...

Danke :)
 
SELECT *,(SELECT AVG(honb.bw) FROM honb WHERE honb.userid = hon.userid) AS `bwe` FROM hon $mdatenbankwherem GROUP by `bwe` ASC LIMIT 10

GROUP BY 'BWE' ?? Du meinst wohl ORDER BY ?!

Ein Durchschnittswert von 0 dürfte eigentlich gar nicht auftreten, wenn sich die Bewertungen nur zwischen 1-6 bewegen können.
Wenn doch, dann ergänze die Query um ein WHERE bwe > 0

SELECT *,(SELECT AVG(honb.bw) FROM honb WHERE honb.userid = hon.userid) AS `bwe` FROM hon $mdatenbankwherem WHERE `bwe` > 0 ORDER by `bwe` ASC LIMIT 10


was ist eigentlich das $mdatenbankwherem ?
 
Hi, dank dir, hast recht das war ORDER, hab mich hier vertippt.

Ich habe gerade das bwe ausgelesen da wo gar keine bewertungen sind, kommt auch nichts raus.

Trotzdem müsste es so sein, wo keine Bewertungen sind, den Eintrag auch nicht auszugeben.

Danke.