MySql Abfrage - Lagerverwaltung

Hallo Leute,
ich stehe heute irgendwie auf dem Schlauch und komme bei einer Abfrage nicht weiter.
Ausgangslage. Es gibt Produkte von verschiedenen Hersteller mit unterschiedlicher Seriennummer, die immer nur einem Kunden zugeordnet werden kann. Artikel ohne Seriennummer können mehreren Kunden gleichzeitig zugeordnet werden. Einzelne Artikel werden vom Kunden zurückgegeben und können dann wieder neu zugeordnet werden.

Hier meine Tabellen:

Tabelle: lagertyp
id
Name
Hersteller
serial

Hallo Christoph,

wie sieht denn Deine SQL-Anfrage derzeit aus, kannst du die bitte einmal hier posten ?

Tobias

Hallo Tobias,
danke für die schnelle Reaktion. Hier meine aktuelle Abfrage:

SELECT lagertyp_details.id, lagertyp.Hersteller, lagertyp.Name, lagertyp_details.Seriennummer FROM (lager_zuord RIGHT JOIN (lagertyp_details INNER JOIN lagertyp ON lagertyp_details.Lag_ID = lagertyp.id) ON lager_zuord.Lagtyp_ID = lagertyp_details.id) LEFT JOIN lager_zuord AS lager_zuord_1 ON lager_zuord.id = lager_zuord_1.id GROUP BY lagertyp_details.id, lagertyp.Hersteller, lagertyp.Name, lagertyp_details.Seriennummer, lagertyp.serial, lager_zuord_1.geloescht HAVING (((Count(lager_zuord.rech_id))=0)) OR (((lagertyp.serial)=0)) OR (((Count(lager_zuord.rech_id))>1) AND ((lager_zuord_1.geloescht)=1)) ORDER BY lagertyp.Hersteller;

Ich bekomme hier die Artikel angezeigt, die noch nie zugeordnet waren und die, die aufgrund keiner Seriennummerpflicht, immer zugeordnet werden können.

Die Artikel, die bereits bei einem Kunden zugeordnet waren und wieder gelöscht wurden, tauchen leider nicht auf.

Hallo Christoph,

heute ist es definitiv zu Warm für solche Denksportaufgaben. Bitte fasse deine anfrage etwas übersichtlicher zusammen, evtl. mit Beispieltabellen die das Verständnis etwas einfacher machen für jemanden der nicht in deinem Projekt zuhause ist.

Und du willst also „einen“ Select mit den Daten haben oder „mehrere“ Selects für deine ganzen *Punkte?

LG

Hallo,

sorry, da muss ich passen, aber ich denke, wenn du in der Abfrage „where“ verwenden würdest, müsstest du weiter kommen.

Tobias

Hallo Christoph,

wie baust du momentan deine Abfrage? Über ein Join oder über verschachtelte Selects?
Eventuell könnte der zweite Weg dir hier helfen.

Meine Query mit Joins (nicht getestest mehr „Pseudo Query“ für Fall 2 & 3 wäre wie folgt:

SELECT * FROM lagertyp t JOIN lagertyp_details d ON t.id = d. lag_id JOIN lager_zuord z ON d.id = z.lagertyp_id WHERE t.serial = 0 OR z.geloescht = 0

Für den 1. Fall vielleicht eine separate Query nehmen. Mir fällt gerade nichts ein wie ich abfrage ob ein fremdschlüssel in einer anderen Tabelle auftaucht…

Hilft Dir das weiter? Wie bist Du an die Sache herangegangen? Wir könnten auf Basis deiner Query diskutieren wie man sie am besten erweitert/verändert.

Grüße
Philipp

Hallo,

das Beispiel bitte noch einmal neu formulieren und bei den Tabellen alle unnötigen Attribute weglassen, z.B. Datum_Anlage, Datum_Ende, Hersteller etc. und ggf. durch „…“ ersetzen.

Dann bitte klarstellen, was für eine Abfrage wann, wo, wie gestellt wird. Für mich scheint es im Augenblick einfach nur zu die folgende Abfrage zu sein:

SELECT gewünschte, Spalten
FROM lager_zuord
WHERE (Bedingung 1)
OR (Bedingung 2)
OR (Bedingung 3)

Da fragt man sich natürlich, was daran nicht funktionieren soll. Offenbar gibt es noch unbekannte Informationen.

So long.

Brauchst du noch eine Antwort? ist schon so lange her, ich war im Urlaub.

Gruß Moni