1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Einfach aber unmöglich?

  • steve
  • 27. April 2006 um 15:22
  • Unerledigt
  • steve
    11
    steve
    Mitglied
    Punkte
    1.220
    Beiträge
    217
    • 27. April 2006 um 15:22
    • #1

    Hallo,

    ich hab folgende Situation:

    Table "Bestellungen" mit BestID, ArtikelID, ArtikelAnzahl
    Table "LagerPaletten" mit PalID, ArtikelID, ArtikelAnzahlAufPalette

    Ich will wissen, ob fuer die bestellten Artikel genuegend Anzahl auf den Paletten im Lager vorhanden ist.

    Idealerweise ist das dann sowas wie

    Zitat

    SELECT ArtikelID, sel1.Anzahl, sel2.Anzahl
    FROM (select ArtikelID, sum(ArtikelAnzahl) as Anzahl from Bestellungen group by ArtikelID) sel1
    JOIN (select ArtikelID, sum(ArtikelAnzahlAufPalette) as Anzahl from LagerPaletten group by ArtikelID) sel2
    ON sel1.ArtikelID = sel2.ArtikelID;

    Das Problem ist nur, dass geschachtelte Statements so in SQL nicht funktionieren, ich weiss (das ist nur zur Veranschaulichung).
    Weiteres Problem: ich muss MySQL 4 verwenden (d.h. keine Views?)

    Gibts da eine Lösung wie ich die beiden Aggregate ins selbe Select bekomme?
    Hört sich nämlich ganz einfach an, aber wir haben uns gerade ziemlich lang darueber den Kopf zerbrochen.
    Ich hasse MySQL...:cuss:

    -----BEGIN GEEK CODE BLOCK-----
    Version: 3.12
    GAT d-(+) s++: a- C++$>+$ U++>+++ P++>+++ L+++ !E W++>$ !N K? w(--)@ !O !M V? PS+ PE++(-)> Y+ PGP(+) t---(-) !5 X R- tv-(--) b++>$ DI+ D+(++) G(+) e>++++* h-- r++ y++
    ------END GEEK CODE BLOCK------ .

  • Green Mamba
    8
    Green Mamba
    Mitglied
    Reaktionen
    1
    Punkte
    591
    Beiträge
    116
    • 27. April 2006 um 16:20
    • #2

    bei mir ist datenbanksysteme zwar schon eine weile her, aber ich wüsste nicht, dass geschachtelte selects damals nicht funktioniert haben (gut, das war ne oracle datenbank, aber das sollte meines wissens auch in mysql gehen)

  • steve
    11
    steve
    Mitglied
    Punkte
    1.220
    Beiträge
    217
    • 27. April 2006 um 19:21
    • #3

    najo, das Hauptproblem ist hier MySQL... Subqueries gibts erst ab 4.1, Views ab 5 (soweit ich rausgefunden hab), und ich sitz auf einer Version 4.0.irgendwas fest.

    aaaaa ich wünsch mir eine echte Datenbank!!!

    -----BEGIN GEEK CODE BLOCK-----
    Version: 3.12
    GAT d-(+) s++: a- C++$>+$ U++>+++ P++>+++ L+++ !E W++>$ !N K? w(--)@ !O !M V? PS+ PE++(-)> Y+ PGP(+) t---(-) !5 X R- tv-(--) b++>$ DI+ D+(++) G(+) e>++++* h-- r++ y++
    ------END GEEK CODE BLOCK------ .

  • Green Mamba
    8
    Green Mamba
    Mitglied
    Reaktionen
    1
    Punkte
    591
    Beiträge
    116
    • 27. April 2006 um 19:56
    • #4

    köpf mich jetzt nicht, wenn ich schwachsinn red, ist wirklich schon länger her, dass ich sql gmacht hab.

    aber funzts nicht so in der art auch?

    select ArtikelID, sum(ArtikelAnzahl), sum(ArtikelAnzahlaufPalette)
    from Bestellungen, Lagerpaletten
    where Bestellungen.ArtikelID = Lagerpaletten.ArtikelID
    group by ArtikelID;

  • steve
    11
    steve
    Mitglied
    Punkte
    1.220
    Beiträge
    217
    • 28. April 2006 um 19:05
    • #5

    So hab ichs mir am Anfang auch gedacht, aber das funkt nicht weil ich sowohl mehrere Bestellungen eines Artikels als auch mehrere Paletten eines Artikels haben kann.

    also z.b.

    Code
    pal1   bananen   100
    pal2   bananen    88
    
    
    best1  bananen  20
    best2  bananen  40

    dann werden alle Paletten mit allen Bestellungen verknüpft, ich hab also

    Code
    100   bananen   20
    100   bananen   40
     88   bananen   20
     88   bananen   40

    und dann wird erst summiert --> falsch.

    Ich bräucht was, wo ich ZUERST summieren und DANN joinen kann. (left/right outer joins helfen da auch nix, weil ich da nur noch mehr Tupel bekomm.)

    Irgendwie weiß ich jetzt, warum ich bisher einen großen Bogen um mysql gemacht hab. (OK, in v.5 ist ja mittlerweile einiges mehr enthalten.)

    -----BEGIN GEEK CODE BLOCK-----
    Version: 3.12
    GAT d-(+) s++: a- C++$>+$ U++>+++ P++>+++ L+++ !E W++>$ !N K? w(--)@ !O !M V? PS+ PE++(-)> Y+ PGP(+) t---(-) !5 X R- tv-(--) b++>$ DI+ D+(++) G(+) e>++++* h-- r++ y++
    ------END GEEK CODE BLOCK------ .

  • Kornuun
    4
    Kornuun
    Mitglied
    Punkte
    140
    Beiträge
    28
    • 29. April 2006 um 16:46
    • #6

    Wie wärs wenn du den join machst, aber dann die summe durch die anzahl der paletten (oder so - die genaue Formel kann ich dir jetzt ausm stehgreif nicht sagen) - dadurch wäre z.B. das obere statement 100+100+88+88 / 2 = 188, 20+40+20+40 / 2 = 60 und das wäre ja richtig... da muss man sich halt anschaun wie sich das für mehrere paletten usw entwickelt, aber das sollte gehen weil du mit count usw. die anzahl ohne probleme hinkriegen solltest!

  • steve
    11
    steve
    Mitglied
    Punkte
    1.220
    Beiträge
    217
    • 4. Mai 2006 um 02:58
    • #7

    also DAS hört sich smart an... coole Idee, danke!
    taucht die Frage auf, ob man die Anzahl der Paletten bzw. Bestellungen auch aus dem einen SQL-Statement auslesen kann...

    -----BEGIN GEEK CODE BLOCK-----
    Version: 3.12
    GAT d-(+) s++: a- C++$>+$ U++>+++ P++>+++ L+++ !E W++>$ !N K? w(--)@ !O !M V? PS+ PE++(-)> Y+ PGP(+) t---(-) !5 X R- tv-(--) b++>$ DI+ D+(++) G(+) e>++++* h-- r++ y++
    ------END GEEK CODE BLOCK------ .

  • Maximilian Rupp 27. Dezember 2024 um 12:06

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung