Willkommen, Gast ( Anmelden | Registrierung )
Suche · Mitglieder · Kalender · Hilfe · Windows 7 Special
   
  Informationen
 

Zuständiger Moderator: Witi

Anzeige
Mysql Join Abfrage
Zusätzlich zu den Tipps unten hilft eventuell ein Registry-Scan: Nervige Windows-Fehler lassen sich oft mit einem Aufräumen der Windows Registry beheben. In der Regel läuft und startet Windows danach auch wieder schneller!
Gratis System-Scan jetzt starten
 
Reply to this topicStart new topic
  Mysql Join Abfrage
 
> Mysql Join Abfrage
Party
Beitrag 22.03.2010, 16:09
Beitrag #1


Gruppensymbol

WF-Süchtling
Beiträge: 480
Beigetreten: 16.01.2004




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

QUELLTEXT
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

Der Beitrag wurde von Party bearbeitet: 22.03.2010, 23:45
Angehängte Vorschaubilder
Angehängtes Bild
 
Profile Card PM Email Poster +ZitierenGo to the top of the page
Witi
Beitrag 22.03.2010, 18:08
Beitrag #2


Gruppensymbol

Supermond
Beiträge: 5.532
Beigetreten: 13.12.2004
Wohnort: Kingsvillage




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:
QUELLTEXT
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


--------------------
witi@jabber.ccc.de 0xAAE321A2

Profile Card PM Email Poster +ZitierenGo to the top of the page
Party
Beitrag 22.03.2010, 19:13
Beitrag #3


Gruppensymbol

WF-Süchtling
Beiträge: 480
Beigetreten: 16.01.2004




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

Profile Card PM Email Poster +ZitierenGo to the top of the page
Party
Beitrag 22.03.2010, 23:45
Beitrag #4


Gruppensymbol

WF-Süchtling
Beiträge: 480
Beigetreten: 16.01.2004




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

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

QUELLTEXT
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


Der Beitrag wurde von Party bearbeitet: 22.03.2010, 23:46
Profile Card PM Email Poster +ZitierenGo to the top of the page
Reply to this topicStart new topic
1 Besucher lesen dieses Thema (Gäste: 1 | Anonyme Besucher: 0)
0 Mitglieder:
 
Haftungshinweis

RSS Vereinfachte Darstellung Aktuelles Datum: 03.09.2010, 14:45