Logikfrage SQL

  • Hi

    ich habe eine Problem. Ich komme einfach nicht auf den gewünschten SQL Code. (arbeite mit MySql und PHP)

    Ich habe 2 Tabellen:
    User:
    id (int, 11, primary)
    name (varchar, 20)

    userdaten:
    id(int, 11, primary)
    userid (int, 11) (Zuordnung zu User->id)
    zahl (double, 5,3)
    status (int, 1) (1/0 oder true/false)

    Userdaten kann mehrere Einträge mit der selben userid haben.
    Nun möchte ich, dass alle User ausgegeben werden. Im Array sollen folgende Infos sein:
    User->id, User->name, Sum(userdaten->zahl). Eigenschaft: WHERE status = 1, sortiert nach der Summe

    Irgendwie bekomme ich das nicht auf die Reihe. Zuerst habe ich es mit User Left Join Userdaten gemacht. Dann habe ich jedoch das problem, dass wenn keine Userdaten vorhanden sind, ich auch keine User ausgabe bekomme.
    Dann dachte ich mir, okay mach Userdaten Left Join User und danach noch eine 2. Abfrage mit den User bei denen keine Zahl vorhanden ist. Hat auch geklappt, aber dann habe ich 2. Abfragen und das ist umständlich.
    Außerdem habe ich dann ein Problem wenn ich weitere Filter einbauen will. Mir wäre es lieber wenn ich nur eine Abfrage habe, jedoch bekomme ich es nicht hin :(
    Im Sum kann man ja keine Abfrage mache, ansonsten wäre es kein Problem. (also Sum(SELECT zahl FROM userdaten WHERE status = 1 AND userid = user.id))

    Ich habe mir auch schon überlegt erst alle User in array zu speichern, dann die Summen auszulesen und dann alles mit PHP zu sortieren. Aber bei vielen Daten wird das sehr serverlastig.

    Hoffentlich kann mir hier einer helfen =)
    Ich wäre der Person / den Personen sehr dankbar.

    Gruß
    Mike

  • SQL
    SELECT `user`.`id`, `user`.`name`, IFNULL(SUM(`userdaten`.`zahl`), 0) as `anzahl` FROM `user` LEFT JOIN `userdaten` ON `user`.`id` = `userdaten`.`userid` WHERE `userdaten`.`status` = 1 OR `userdaten`.`status` is NULL GROUP BY `user`.`id`

    garnicht so einfach^^ Das Problem ist die Bedingung userdaten.status, weil wenn es keine passenden Datensatz in der anderen Tabelle gibt, gibt MySQL halt NULL zurück und NULL ist nicht "1", deshalb werden die auch nicht zurückgegeben... Probiers mal so ;)

    Gruß crAzywuLf :D

    4 Mal editiert, zuletzt von crAzywuLf (29. November 2011 um 14:17)