Announcement

Collapse
No announcement yet.

mysql joins

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

  • mysql joins

    Ich bin gerade dabei ein Inventory Tool zu bauen. Habe nun Folgendes Problem:
    dbDesign:


    Folgende Situation:
    1) Ich lese sämmtliche Software aus die den status (s.soft_license = 1) hat aus.
    2) Ich Joine die verknüpfungstabelle Zwischen Software und Computer und zähle somit wie oft die Software installiert wurde
    3) Ich Joine die Tabelle (inventory_software_license) und zähle wieviele lizenzen zu dem Produkt gekauft wurden.
    4) Ich suche nur eine bestimmte Geschäftsstelle (g.comp_user_gst = '8900').

    Code:
    SELECT `s`.`soft_name` AS `software`, COUNT(*) AS `anz`, `l`.`license_num`
    FROM `inventory_software` AS `s`
    
    INNER JOIN `inventory_computer_has_inventory_software` AS `c` ON s.soft_id = c.inventory_software_soft_id
    INNER JOIN `inventory_computer` AS `g` ON c.inventory_computer_comp_id = g.comp_id
    
    LEFT JOIN `inventory_software_license` AS `l` ON s.soft_id = l.license_soft_id
    
    WHERE (s.soft_license = 1) AND (g.comp_user_gst = '8900')
    GROUP BY `c`.`inventory_software_soft_id`
    ORDER BY `s`.`soft_name` ASC
    Funktioniert auch alles soweit. Ich bekomme folgendes Ergebnis:
    Produkt | anzahl der installationen | gekaufte lizenzen
    Microsoft Office Enterprise 2007 | 1 |0
    Microsoft Office Professional Edition 2003 | 5 | 2
    Microsoft Office Standard Edition 2003 |8 |0
    Zend Studio for Eclipse - 6.1.2 | 1 | 2

    So und jetzt stehe ich vor einem großen Problem.
    Da ich in der Tabelle `inventory_software_license` nun auch eine spalte GST eingefügt habe das ich für die einzellnen Geschäftsstellen die Lizenezen hinzufügen kann...scheitere ich an einer Lösung. Da hier nicht immer Daten vorhanden sind.
    (zurzeit zeigt er egal bei welcher Geschägtsstelle dann immer die gesammten gekauften Lizenzen an)

    Nehmen wir an die GST ist jetzt "1200" und in der Tabelle stehen noch keine Daten dann zeigt es mir dei Einträge nicht an. Somit kann ich kein Where benützeb (WHERE (l.license_gst = 1200) ).

    Und wenn ich den letzten Join ändere auf:
    LEFT JOIN `inventory_software_license` AS `l` ON g.comp_user_gst = l.license_gst dann verfällscht er mir das COUNT ergebnis.

    Habt ihr da eine Lösung? Kenn mich leider nicht sooo gut aus in mySQL. Hoffe auch ich hab das ganze verständlich erklärt.

    Wenn nicht hier nochmal die kurzfassung was gewünscht wäre:
    1)Sämmtliche Software was auf den Computern installiert ist soll gezählt werden
    2)Es sollte die Anzahl der Software/PC pro GST filterbar sein.

    dritter und Letzter Punkt der noch nicht funktioniert:
    3)Es sollte di Anzahl der Gekauften Lizenzen auch auf die GST filterbar sein. Zurzeit übernimmt er einfach die gesammte anzahl.


    Vielen lieben dank für eure Bemühungen

  • #2
    `l`.`license_num` gehört auf alle Fälle in GROUP BY

    Comment


    • #3
      Originally posted by ebis View Post
      `l`.`license_num` gehört auf alle Fälle in GROUP BY
      ebenso wie `s`.`soft_name`, dafür gehört `c`.`inventory_software_soft_id` nicht dorthin! Wenn du dich nicht an die "Gruppierungsregeln" (Jede im Select-Teil aufgeführte Spalte, die kein Aggregat ist, MUSS auch in der GROUP BY-Klausel enthalten sein) hältst, brauchst du dich nicht wundern wenn du "undefinierbare" Ergebnisse bekommst.

      Gruß Falk
      Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

      Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

      Comment

      Working...
      X