Dieser Beitrag ist schon älter. Bitte vergewissern Sie sich, dass die Rahmenbedingungen oder der enthaltene Lösungsvorschlag noch dem aktuellen Stand der Technik entspricht.

Abfrage über mehrere Tabellen mit Filtern (MySQL)

Mitglied: rbaumann
Guten Tag,

ich hoffe ihr könnt mir helfen, da ich mit Abfragen (PHP) mehrere Tabellen (MySQL) noch Probleme habe.

Ich habe folgende Tabellen:

1. Personen Tabelle mit Feldern:
ID,Name,Strasse,Ort...

2. Tabelle mit Produkt:
ID,Personen_ID,Name,Version,Anzahl

Inhalt z.B.
Personen:
1,Müller,Alfredweg 2,48912 Berlin
2,Meyer,Musterstr. 12,48916 Berlin

Produkte:
1,2,Windows,98,2
2,2,Windows,XP,5
3,2,Windows,XP,10
4,2,Windows,Vista,2
5,1,Windows,XP,1
6,1,Windows XP,2


Ich erstelle eine Übersichtsliste, in der alle Personen gelistet werden:

SELECT
Personen.ID,
Personen.Name,
Personen.Ort,
FROM Personen,Produkte
Where
Personen.ID=Produkte.Personen_ID
GROUP BY Personen.ID order by Personen.Name


1. Nun meine erste Frage:
Ich möchte in meiner Ansicht neben den Kundendaten in der jeweiligen Zeile auch mit Kürzeln anzeigen lassen, welche Produkte der jeweilige Kunde hat.

Also z.B.
Müller 48912 Berlin XP
Meyer 48916 Berlin 98 XP Vista

Bisher rufe ich für jede Zeile separat die Tabelle Produkte auf und lese die einzelnen Zeilen, um die Produkte auszulesen.

Das dauert natürlich entsprechend lange.
Wie kann ich direkt in der Select Abfrage die Daten so abfragen, dass ich meine Person nur einmal ausgeworfen bekomme, die Produkte dazu hintereinander in Feldern?


2. Filtern
Ich Filter in der Abfrage auch nach Produkten. Ich frage z.B. ab, welche Person Windows XP hat:

SELECT
Personen.ID,
Personen.Name,
Personen.Ort,
FROM Personen,Produkte
Where
Personen.ID=Produkte.Personen_ID
and Produkte.Version='XP'
GROUP BY Personen.ID order by Personen.Name

Soweit so gut.
Nun möchte ich aber auch abfragen, welche Person hat XP und noch kein Vista. Dies klappt so ja nicht, da ich ja nicht abfragen kann:
and Produkte.Version='XP' and Produkte.Version<>'Vista'

Das trifft ja immer zu, da die jeweilige Zeile aus Produkt mit XP ja logischerweise kein Vista sein kann.


3. Zählen und Filern

Zudem möchte ich abfragen, welche Person hat z.B. mehr als 10 Windows XP Lizenzen:

SELECT
Personen.ID,
Personen.Name,
Personen.Ort,
FROM Personen,Produkte
Where
Personen.ID=Produkte.Personen_ID
and Produkte.Version='XP' and Produkte.Anzahl>'10'
GROUP BY Personen.ID order by Personen.Name

Das Ergebnis stimmt nicht, da es mehrere Zeilen mit dem Produkt XP für die Person gibt. Die Anzahl müßte addiert werden. Wie bringe ich das noch mit unter?


Es sind viele Fragen, ich hoffe aber dass mir jemand einen Lösungsansatz geben kann.

Vielen Dank

Richard

Content-Key: 100813

Url: https://administrator.de/contentid/100813

Ausgedruckt am: 30.07.2021 um 22:07 Uhr

Mitglied: dog
dog 02.11.2008 um 14:39:48 Uhr
Goto Top
Hallo,

1. Such mal bei Google nach "mysql column with comma separted list subquery" - Das geht so nicht ohne einige Umwege in Mysql.
Wenn du allerdings allein diese Datenbank benutzt (oder mit unter 500 Leuten gleichzeitig) sollte zwischen einer iterativen Lösung in PHP und einer direkten in MySQL kein Unterschied feststellbar sein. Alternativ kannst du diese Abfrage benutzen:
Da du aber eine 1:n Relation hast wirst du hiermit mehrere Zeilen pro Kunde erhalten, du müsstest also in PHP noch doppeltes Filtern und die Kommaliste erstellen.

2. Ungetestet!

3. Auch ungetestet

Mitglied: Biber
Biber 03.11.2008 um 07:45:50 Uhr
Goto Top
Moin rbaumann,

nur eine kleine Variation zu dogs Ausführungen.
Das Statemennt 2 würde ich aus Gründen der Lesbarkeit so schreiben:
Ist aber eher aus Gründen der Verständlichkeit - performant wird weder dogs noch mein Ansatz werden (können).
Wenn Du wirklich Fragestellungen dieser Art und ein halbwegs nennenswertes Datenvolumen vorliegen hast, dann vergiss denn akademischen Unsinn mit 3.Normalform und so was und DE-normalisiere Deine Tabellen (bei Produkte ein Feld für "Anzahl WindowsXP", ein Feld für "Anzahl Vi$ta", ein Feld für ... [alle häufigen], ein Textfeld Varchar(200) für Exoten.)

Grüße
Biber
Heiß diskutierte Beiträge
general
Telekom hat größere Störung gelöst anteNopeVor 1 TagAllgemeinInformationsdienste30 Kommentare

Moin, es scheint als hätte die Telekom gerade eine größere Störung. Bei vielen Kunden mit Telekom-Internetanschluss funktionieren Office 365 und auch IMAP-Mails nicht. Wartezeit in ...

question
Massive Probleme mit Windows Suche, Taskbar, Windows Standard Apps auf jedem Windows 10-PC im Firmennetzwerkrznr666Vor 1 TagFrageWindows 1027 Kommentare

Hallo liebe Community, die PCs in unserem Unternehmen weisen folgende Probleme auf. Die Fehler treten nach einiger Zeit auf JEDEM Windows 10-PC auf, der genaue ...

question
Absicherung Exchange ServerLKleemannVor 1 TagFrageExchange Server10 Kommentare

Hallo zusammen, wir sind bei uns in der Firma nun endlich vom Exchange POP3 Connector weggekommen und empfangen nun unsere E-Mail direkt über MX-Einträge. Nun ...

question
Anmeldeprobleme w10 auf server2012fisch56Vor 1 TagFrageWindows Server16 Kommentare

Hallo allerseits, mich bringt es fast um. Server 2012R, 7 Arbeitsstationen, alle haben einen Zugriff auf den Server, dort sind 2 Programme, alles läuft easy. ...

report
Erfahrungsbericht Vodafone - All your Verträge belong to us!anteNopeVor 1 TagErfahrungsberichtFlatrates12 Kommentare

Hallo zusammen, da the-buccaneer so nett gebeten hat, hier eine weitere Erfahrung mit und von Voodoofone. Es begab sich zur Zeit zu Weihnachten vor 3 ...

info
Happy System Administrator Appreciation Day0xFFFFVor 16 StundenInformationHumor (lol)7 Kommentare

Guten Morgen Byteschubser, ihr seid die superhelden der Wirtschaft! _Danke dass es euch (uns #eigenlob) gibt. Mögen Eure Systeme stets Viren- und Hackerfrei bleiben, eure ...

question
Robocopy - FEHLER 0 (0x00000000)emeriksVor 1 TagFrageBatch & Shell10 Kommentare

Hi, habe ich hier einen täglichen Copy Job, wo Robocopy plötzlich "Fehler 0" meldet, dass es erfolgreich sei, aber nichts kopiert. Festplatte des NAS ist ...

question
Revisionssicher SpeicherschneerunzelVor 1 TagFrageHardware4 Kommentare

Moin zusammen, bei uns in der Organisation läuft aktuell ein Projekt, welches revisionssicher Archiviert werden muss. Das Projekt hat ein definiertes Startdatum und auch ein ...