Gulli: Schwere MySQL-Abfrage

Hallo,

Ich habe eine Tabelle die den Lagerbestand enthält.
Artikel die ein oder ausgehen werden folgendermaßen in die DB aufgenommen:

Artikel-Nr
Menge
Lagerplatz
Richtung
(und andere, jetzt aber unwichtig)

Da es nicht für jeden Artikel nur einen Lagerplatz gibt, muss dieser bei jeder eingehenden Buchung oder auch ausgehender Buchung festgehalten werden.
Die Richtung (0 oder 1) steht für 0 = raus und 1 = rein.

Beispiel:
ArtNr Menge Platz Richtung
1 2 A4 0
2 3 A3 1
2 1 A3 0
2 3 A2 0
2 5 A3 1
2 4 A2 1
4 2 A3 1
4 2 A3 1
4 1 AQ 0
4 1 AQ 0

Ich wollte eine SQL-Abfrage gestalten, die mir als Ergebnis für jede ArtikelNr den Lagerplatz und deren Menge ausgibt.

Quasi so:
ArtNr Platz Menge
1 A4 -2
2 A3 7
2 A2 1
4 A3 4
4 AQ -2

Meine versuch:
[Artikel-NR Schleife]
$qry = "SELECT sum(menge),platz,richtung FROM artikellog WHERE artnr='$artnr' GROUP BY platz,richtung";
[/Artikel-Nr Schleife]

Aber damit habe ich mit dem print "$artnr = $sum / $platz / $richtung<br>";

nur die ausgabe
1 = 2 / A4 / 0

2 = 3 / A2 / 0
2 = 4 / A2 / 1
2 = 1 / A3 / 0
2 = 8 / A3 / 1

4 = 4 / A3 / 1
4 = 2 / AQ / 0

erzeugen können.
das ist ja schon nah dran, aber nicht genau das was ich brauche.

HIILLFE!!!

Gulli

  1. Hallo,

    Ich wollte eine SQL-Abfrage gestalten, die mir als Ergebnis für jede ArtikelNr den Lagerplatz und deren Menge ausgibt.

    Meine versuch:

    $qry = "SELECT sum(menge),platz,richtung FROM artikellog WHERE artnr='$artnr' GROUP BY platz,richtung";

    denke einmal über ein zusätzliches group by artnr nach.

    cu,
    ziegenmelker

    1. Hi,
      $qry = "SELECT sum(menge),platz,richtung FROM artikellog WHERE artnr='$artnr' GROUP BY platz,richtung,artnr";

      führt zu keiner veränderung.
      oder wie hast du das gemeint.

      Das Problem ist doch: wie bringe ich es der Datenbank bei bzw. dem SQL-Befehl Datensätze mit der
      Richtung 0 der Summe abzuziehen und
      Richtung 1 der Summe zu addieren?

      Gulli

      1. Hallo,

        $qry = "SELECT sum(menge),platz,richtung FROM artikellog WHERE artnr='$artnr' GROUP BY platz,richtung,artnr";

        führt zu keiner veränderung.
        oder wie hast du das gemeint.

        Das Problem ist doch: wie bringe ich es der Datenbank bei bzw. dem SQL-Befehl Datensätze mit der
        Richtung 0 der Summe abzuziehen und
        Richtung 1 der Summe zu addieren?

        ok, falsch verstanden.

        select artnr as Artikelnr, sum(menge + richtung * 2 - 1) as Bestand, platz as Lagerort  
        from artikellog  
        where artnr = '$artnr'  
        group by artnr, platz
        

        hth.

        cu,
        ziegenmelker

        1. Hallo,

          für alle Artikel sieht das so aus:

          select artnr as Artikelnr, sum(menge + richtung * 2 - 1) as Bestand, platz as Lagerort  
          from artikellog  
          group by artnr, platz
          

          Und für einen bestimmten Artikel so:

          select "$artnr" as Artikelnr, sum(menge + richtung * 2 - 1) as Bestand, platz as Lagerort  
          from artikellog  
          where artnr = '$artnr'  
          group by platz
          

          cu,
          ziegenmelker

  2. Hi,

    nur die ausgabe
    1 = 2 / A4 / 0

    2 = 3 / A2 / 0
    2 = 4 / A2 / 1
    2 = 1 / A3 / 0
    2 = 8 / A3 / 1

    4 = 4 / A3 / 1
    4 = 2 / AQ / 0

    ich schalte mich mal zu...

    Also, das sieht doch schon ganz gut aus (ich habe schon mdst. 10 Minuten auf Dein Posting geglotzt), was willst Du denn mehr?

    Gruss,
    Ludger

  3. yo,

    Ich wollte eine SQL-Abfrage gestalten, die mir als Ergebnis für jede ArtikelNr den Lagerplatz und deren Menge ausgibt.

    SELECT artnr, platz, sum(if(richtung=1, menge, menge * -1)) AS Menge
    FROM artikellog
    GROUP BY artnr, platz

    Ilja

    1. Hallo,

      SELECT artnr, platz, sum(if(richtung=1, menge, menge * -1)) AS Menge
      FROM artikellog
      GROUP BY artnr, platz

      Thats it!
      Genau danach hab ich gesucht!

      Vielen Dank an alle die sich mit meiner Problematik befasst haben, ich würd euch am liebsten allen mal die Hand schütteln =)

      Vielen Dank nochmal und tschüss.

      Gulli