WinFuture-Forum.de: Mysql Join Abfrage - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Mysql Join Abfrage


#1 Mitglied ist offline   Party 

  • Gruppe: aktive Mitglieder
  • Beiträge: 501
  • Beigetreten: 16. Januar 04
  • Reputation: 0

geschrieben 22. März 2010 - 16:09

Ich bin gerade dabei ein Inventory Tool zu bauen. Habe nun Folgendes Problem:
(Tabellen Verknüpfung und Felder im Anhang)

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 = '1000').

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 = '1000')
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

Angehängte Miniaturbilder

  • Angehängtes Bild: sql.jpg

Dieser Beitrag wurde von Party bearbeitet: 22. März 2010 - 23:45

0

Anzeige



#2 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.942
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 22. März 2010 - 18:08

Du versuchst mehrere Aggregatfunktionen in einer Abfrage zu formulieren, dies lässt sich über Sub-Selects lösen.

Vorausgesetzt, dass ich dich richtig verstanden habe, müsste die Lösung wie folgt lauten:
SELECT s.soft_name AS software, COUNT(*) AS softwareInstallationen, (
	SELECT count(*) FROM inventory_software_license isl
	WHERE isl.license_num = l.license_num AND isl.licence_gst = l.license_gst
) as lizenzInstallationen, l.license_num
FROM inventory_software s
JOIN inventory_computer_has_inventory_software c ON s.soft_id = c.inventory_software_soft_id
JOIN inventory_computer g ON c.inventory_computer_comp_id = g.comp_id
LEFT JOIN inventory_software_license 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

0

#3 Mitglied ist offline   Party 

  • Gruppe: aktive Mitglieder
  • Beiträge: 501
  • Beigetreten: 16. Januar 04
  • Reputation: 0

geschrieben 22. März 2010 - 19:13

vielen lieben dank für die bemühungen. kann es heute leider nicht mehr testen aber werds morgen in der früh gleich ausprobieren :)
0

#4 Mitglied ist offline   Party 

  • Gruppe: aktive Mitglieder
  • Beiträge: 501
  • Beigetreten: 16. Januar 04
  • Reputation: 0

geschrieben 22. März 2010 - 23:45

so habs doch noch heute probieren können. Kino Green Zone ging doch nicht solang :)

hat nicht ganz funktioniert. hab es jetzt passend gemacht. danke nochmal für die info über die subquerys.

SELECT s.soft_name AS software, COUNT(*) AS softwareInstallationen, (
	SELECT isl.license_num FROM inventory_software_license isl
	WHERE isl.license_gst = g.comp_user_gst AND isl.license_soft_id = s.soft_id
) as lizenzGekauft
FROM inventory_software s
JOIN inventory_computer_has_inventory_software c ON s.soft_id = c.inventory_software_soft_id
JOIN inventory_computer g ON c.inventory_computer_comp_id = g.comp_id
LEFT JOIN inventory_software_license l ON s.soft_id = l.license_soft_id
WHERE (s.soft_license = 1) AND (g.comp_user_gst = '1000')
GROUP BY c.inventory_software_soft_id

Dieser Beitrag wurde von Party bearbeitet: 22. März 2010 - 23:46

0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0