tutorials.de Buch-Aktion 05/2012
Like Tree3Danke
  • 1 Beitrag von Alaitoc
  • 1 Beitrag von Tim Bureck
  • 1 Beitrag von Alaitoc
ERLEDIGT
JA
ANTWORTEN
7
ZUGRIFFE
242
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Lime
    Lime Lime ist gerade online frisch fruchtig
    Registriert seit
    Jul 2011
    Beiträge
    372
    Hallo da draußen,

    ich hab ein ziemliches Problem und bin mit meinem Latein auch relativ am Ende... Mysql ist halt doch sehr viel weitläufiger wie ich es kenne.

    Derzeit habe ich eine Mysql-Abfrage, die mir alle Benutzer aus einer Benutzerliste gibt (wo Status == 1 ... bedeutet soviel wie "noch aktiv"), die noch KEINEN eintrag in einer "Verknüpfungstabelle" haben... (nur einem bestimmten Event zugeschrieben, deswegen die INNER JOINS)

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    SELECT *
    FROM intern_user
    WHERE 
    (
        id NOT IN 
        (
            SELECT a.userID
            FROM intern_dienstplan AS a
            INNER JOIN intern_events_uucat AS b ON a.uucatID=b.id
            INNER JOIN intern_events_ucat as c ON b.ucatID=c.id
            INNER JOIN intern_events_cat AS d ON c.catID=d.id
            WHERE d.eventID = '".$_POST['eventid']."'
        )
    )
    AND status='1'

    Was ich jetzt haben möchte, ist eine Abfrage, die mir sowohl alle Benutzer liefert die noch keinen Eintrag haben, aber auch die Benutzer, die nicht genug Dienst haben.

    Es gibt 50% und 100% Dienste (theoretisch auch andere, aber lassen wir es mal so).
    Der "Wert" eines Dienstes liegt bei intern_events_uucat als Spalte "wert", ohne %-Zeichen.

    Mein Versuch war einfach bei der inneren Abfrage ein
    Code :
    1
    
    AND SUM(b.wert)=100
    anzuhängen, aber das funktioniert nicht. Vielleicht weil es falsch formatiert ist, weis ich nicht. Hab da nicht so viel Erfahrung mit dieser Funktion.

    Wär klasse wenn mir jemand helfen könnte... Soll mir einfach nur die Benutzer ohne, bzw. die mit zu wenig (unter 100% gesamt) ausgeben.

    Gruß, Lime
     

  2. #2
    Avatar von erik s.
    erik s. erik s. ist offline Mitglied Brokat
    Registriert seit
    Mar 2002
    Ort
    Frankfurt (Hessen)
    Beiträge
    317
    Hi,

    ich bin mir nicht 100%-ig sicher, aber ich glaube, dass du noch ein GROUP BY brauchst, damit dein SUM() funktioniert.
     

  3. #3
    Avatar von Lime
    Lime Lime ist gerade online frisch fruchtig
    Registriert seit
    Jul 2011
    Beiträge
    372
    Huhu,
    darüber habe ich auch schon nachgedacht. Aber ich kann doch nicht einfach die WHERE-klausel durch nen GROUP BY ersetzen...
    gruß
     

  4. #4
    Alaitoc Alaitoc ist offline Mitglied Gold
    Registriert seit
    Oct 2007
    Beiträge
    115
    Du brauchts zusätzlich eine GROUP BY Klausel, da diese die Daten definiert, die ausgewertet werden können....oder so ähnlich zumindest *grübel*

    Zumindest ist diese soweit ich weiß unerlässlich für Sachen wie SUM()

    http://www.sql-und-xml.de/sql-tutori...von-daten.html

    Dort auf der Seite ist auch ein Beispiel mit SUM, wobei vorher halt ein GROUP BY benutzt wird.

    MfG Alaitoc
    Lime bedankt sich. 

  5. #5
    Avatar von Lime
    Lime Lime ist gerade online frisch fruchtig
    Registriert seit
    Jul 2011
    Beiträge
    372
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    
    SELECT a.userID
    FROM intern_dienstplan AS a
    INNER JOIN intern_events_uucat AS b ON a.uucatID=b.id
    INNER JOIN intern_events_ucat as c ON b.ucatID=c.id
    INNER JOIN intern_events_cat AS d ON c.catID=d.id
    WHERE d.eventID = '".$_POST['eventid']."'
    AND sum(b.wert)>=100
    GROUP BY a.userID

    so hätte ich es jetzt verstanden... funktioniert aber dennoch nicht.
     

  6. #6
    Tim Bureck Tim Bureck ist offline Mitglied Platin
    Registriert seit
    Apr 2009
    Ort
    Düsseldorf (NRW)
    Beiträge
    508
    Hi,

    Bedingungen von Aggregatfunktionen wie sum, count o.ä. müssen in die HAVING Klausel nach der GROUP BY Klausel.

    Best regards,
    Tim Bureck
    Lime bedankt sich. 

  7. #7
    Alaitoc Alaitoc ist offline Mitglied Gold
    Registriert seit
    Oct 2007
    Beiträge
    115
    Genau, wie im Beispiel Nr. 9 beschrieben:

    Code :
    1
    2
    3
    4
    5
    
    SELECT A.A_NR, SUM(A.A_PREIS * B.A_STUECK) As [Umsatz-dieses-Artikels]
    FROM ARTIKEL As A INNER JOIN UMSATZ As B
    ON A.A_NR = B.A_NR
    GROUP BY A.A_NR
    HAVING SUM(A.A_PREIS * B.A_STUECK) > 10000

    Auf der Seite steht eigentlich alles wissenwerte über SQL, man muss sich nur etwas Zeit dafür nehmen

    MfG Alaitoc
    Lime bedankt sich. 

  8. #8
    Avatar von Lime
    Lime Lime ist gerade online frisch fruchtig
    Registriert seit
    Jul 2011
    Beiträge
    372
    Die Zeit fehlt mir. Ich probier das gleich mal aus.

    €: Ich hätte nicht gedacht, dass es klappt, aber es tut es!
    Vielen vielen Dank an alle Helfer.

    Für alle, die vielleicht dasselbe Problem ereilen sollte, hier mein fertiger Code:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    SELECT *
    FROM intern_user
    WHERE 
    (
        id NOT IN 
        (
                SELECT a.userID
            FROM intern_dienstplan AS a
            INNER JOIN intern_events_uucat AS b ON a.uucatID=b.id
            INNER JOIN intern_events_ucat as c ON b.ucatID=c.id
            INNER JOIN intern_events_cat AS d ON c.catID=d.id
                    WHERE d.eventID='".$_POST['eventid']."'
            GROUP BY a.userID
            HAVING sum(b.wert) >= 100
        )
    )
    AND status='1'

    Gruß, Lime
    Geändert von Lime (29.08.11 um 15:13 Uhr)
     

Ähnliche Themen

  1. Antworten: 6
    Letzter Beitrag: 07.08.09, 22:12
  2. Antworten: 3
    Letzter Beitrag: 29.11.08, 20:08
  3. MySQL: ERROR 2013 (HY000): Lost connection to MySQL server during query
    Von blumshuett im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 07.06.06, 23:23
  4. mysql: mysql-server: mysql.sock fehlt (Suse 9.1)
    Von zappoth im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 08.05.06, 18:06
  5. Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
    Von strandjunge im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 19.01.05, 15:33

Stichworte