Announcement

Collapse
No announcement yet.

Abfrage aus 3 Tabellen, ORDER funktioniert nicht

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Abfrage aus 3 Tabellen, ORDER funktioniert nicht

    Hallo,
    ich habe schon seit längerem ein Problem bei einer meiner Abfragen, und komme selbst nicht auf die Lösung. Ich hoffe, dass mir hier jemand helfen kann.

    Ich habe 3 Tabellen:
    - User: Enthält allgemeine Userinformationen
    - Konto: Enthält Kontoinformationen für die einzelnen User
    - Zukauf: Enthält zugekaufte Kontingente der einzelnen User

    Die Tabellen sind folgendermaßen aufgebaut (nur die relevanten Spalten):
    Code:
    User:
    id | benutzername |status
    ---------------------------------
    1  | testuser        | 1
    2  | blabla          | 3
    
    Konto:
    uid | limit
    ------------
    1    | 1
    2    | 1
    
    Zukauf:
    uid | type | remain
    -----------------------
    1    | 1      | 30
    1    | 2      | 90
    ...
    Ich benötige einen SQL Befehl, der im Prinzip für jeden User die Werte in zukauf.remain addiert und anzeigt.
    Das funktioniert auch sehr gut, nur die Sortierung in meinem SQL-Befehl funktioniert leider nicht. Dies ist aber sehr wichtig.
    Hier das Statement:
    Code:
    SELECT *, sum(remain) 
    FROM user as u 
    LEFT JOIN zukauf as z ON u.id = z.uid 
    LEFT JOIN konto as k ON u.id = k.uid 
    WHERE u.deleted = 0 AND z.deleted = 0  
    GROUP BY z.uid 
    ORDER BY u.status ASC
    Ich weiß, dass das Sortieren aufgrund des GROUP BY nicht funktioniert, allerdings weiß ich nicht, wie ich das sonst lösen sollte. Kann mir jemand helfen??

  • #2
    Hi,

    da fallen mir gleich mehrere Dinge auf:
    nur die Sortierung in meinem SQL-Befehl funktioniert leider nicht.
    Das ist nicht unbedingt eine aussagekräftige Fehlerbeschreibung. Was genau funktioniert nicht?

    GROUP BY z.uid
    Im GROUP BY müssen alle Spalten aufgenommen werden, die nicht aggregiert werden. Ältere Versionen von mysql schlucken das von dir verwendete (und fehlerhafte) SQL und erweitern es selbstständig um die restlichen Spalten (das siehst Du aber nur am Ergebnis). In anderen Datenbanken bzw. aktuellen mysql Versionen wäre dein SQL nicht lauffähig.

    SELECT *
    Man verwendet keinen SELECT * in einem produktiven SQL (mal von ganz wenigen Ausnahmen vielleicht abgesehen). Sprich: liste alle Spalten die Du selektieren möchtest im SELECT auf und nimm sie ins GROUP BY (abgesehen von deiner SUM Spalte natürlich).

    Dim
    Zuletzt editiert von dimitri; 09.11.2008, 14:57.
    Zitat Tom Kyte:
    I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

    Comment


    • #3
      Erst mal Danke für die Antwort, habe das Statement jetzt mal entsprechend umgebaut:
      Code:
      SELECT u.id, u.benutzername, u.nachname, u.vorname, u.handynummer, u.status, k.smslimit, u.regdat, sum(remain) 
      FROM asvoe_user as u 
      LEFT JOIN asvoe_zukauf as z 
      ON u.id = z.uid 
      LEFT JOIN asvoe_konto as k 
      ON u.id = k.uid 
      WHERE u.deleted = 0 AND z.deleted = 0 
      GROUP BY u.id, u.benutzername, u.nachname, u.vorname, u.handynummer, u.status, k.smslimit, u.regdat 
      ORDER BY u.status ASC
      Und mit "Die Sortierung funktioniert nicht" habe ich gemeint, dass eben nicht aufsteigend nach der Status-Spalte sortiert wird, sondern, so weit ich das sehe, willkürlich.

      Comment

      Working...
      X