MySQL 5.5.8 Lagerbestand erfassen

Vandroiy

Mitglied
Hallo Community,

ich hab ein kleines Probelm und komme irgendwie nicht wirklich auf die Lösung. Und zwar möchte ich einfach eine Abfrage darüber machen wie groß meine Lagerkapazität im gesamten ist und wieviel Lagerplatz ich schon verbraucht habe.
Hierfür habe ich zwei Tabellen
Die erste Tabelle hat die Information was es für Lager gibt (Aufgebaut als nested Set) und die zweite beinhaltet die Informationen ob der Lagerplatz noch vorhanden ist.

HTML:
id|root_id|name|lft|rgt|place_id
--------------------------------------------
1|1|Lager_5|1|6|1
2|1|Reihe1|2|5|2
3|1|Fach1|3|4|3
4|2|Lager_4|1|6|4
5|2|Reihe1|2|5|5
6|2|Fach1|3|4|6

HTML:
id_action 1=angelegt;2=benutzt;3=frei

id|place_id|id_action|is_storage
-------------------------------------
1|3|1|0
2|3|1|0
3|3|2|1
4|3|3|1
5|6|2|1
6|6|2|1
7|6|3|1


Und jetzt möchte ich gern dieses Ergebniss haben
HTML:
name|capacity|used
Lager_5|2|1
Lager_4|3|2

Das Count zu erstellen geht ja recht fix aber nun dies so zu integrieren wie gewünscht bekomme ich irgendwie nicht hin.

HTML:
Select Count(*) from device
left join storage on place_id=place_id
where is_storage=1
Select Count(*) from device
left join storage on place_id=place_id
where is_storage=1 and id_action=2

Freue mich über jede idee die ihr habt. Und sobald mir die Lösung eingefallen ist schreibe ich sie auch gleich hier rein.

Danke schon mal.


edit:
Hmmm also langsam komme ich auf das Ergebniss

HTML:
Select sets.name, capacity.capacity, used.used
from
  (
    SELECT root_id,name, count(*) as capacity FROM lager
    left join storage on lager.place_id = place_id
    where is_storage=1
    group by root_id) as capacity,
  (
    SELECT root_id,name, count(*) as used FROM lager
    left join storage on lager.place_id = place_id
    where is_storage=1 and id_action=3
    group by root_id) as used,
    lager
where
  lager.root_id = capacity.root_id and
  lager.root_id = used.root_id
  and lager.lft=1

Aber hier habe ich das Problem das mir jetzt Lager fehlen würden die keine eingelagerten Plätze haben.
Wenn meine Beispeil jetzt so aussieht

HTML:
id|place_id|id_action|is_storage
-------------------------------------
1|3|1|0
2|3|1|0
3|3|1|1
4|3|1|1
5|6|2|1
6|6|2|1
7|6|3|1

Bekomme ich nur das zurück und die angabe das mein Lager_5 2 Lager möglichkeitet bietet fällt weg.

HTML:
name|capacity|used
Lager_4|3|2


edit2:
Na es geht doch :)...

Danke das ich das Forum zu schreiben durfte und damit auf die Lösung gekommen bin. Es hilft echt schon weiter wenn man mal jemanden beschreibt was man vor hat. Und hoffentlich hilft es anderen dann weiter.

Also hier meine Select abfrage
HTML:
Select sets.name, capacity.capacity, used.used
from
lager,
  (
    SELECT root_id,name, count(*) as capacity FROM lager
    left join storage on lager.place_id = place_id
    where is_storage=1
    group by root_id) as capacity
left join
  (
    SELECT root_id,name, count(*) as used FROM lager
    left join storage on lager.place_id = place_id
    where is_storage=1 and id_action=3
    group by root_id) as used on capacity = used.root_id
    
where
  lager.root_id = capacity.root_id and
  lager.lft=1

Wer dazu noch andere Ideen hat die performanter sind dann nur her damit.
 

Neue Beiträge

Zurück