Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] suche sql statement

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] suche sql statement

    hallo!

    folgendes problem: ich habe in einer tabelle die felder "kundennummer" und "artikelnummer". jede kundennummer hat also bestimmte artikel zugeordnet. zusätzlich gibt es die kundennummer "0", die die allgemeinen artikel beinhaltet, welche alle kunden angezeigt bekommen.

    das problem ist, dass die artikel mit spezifischer kundennummer eine teilmenge aus den artikeln mit der kundennummer "0" sind.

    angezeigt werden sollen alle artikel der jeweiligen kundennummer PLUS die artikel mit der allgemeinen kundennummer "0", wenn die artikelnummer nicht schon bei den spezifischen kundennummer vorkommt.

    dh. es darf keine artikelNr doppelt vorkommen, Artikelnummern mit einer kundennummer != 0 müssen bevorzugt werden. ein einfacher "group by artikelnummer" reicht also nicht.

    vielleicht kann mir jemand von euch helfen.
    beispiel:
    nrKu | nrArt
    1 | 1
    1 | 2
    1 | 3
    0 | 1
    0 | 2
    0 | 3
    0 | 4
    0 | 5


    angezeigt werden soll:
    nrKu | nrArt
    1 | 1
    1 | 2
    1 | 3
    0 | 4
    0 | 5


  • #2
    Auch wenn ich meine, dass diese Mehrfachspeicherung absoluter Blödsinn ist, und den Grundlagen der relationalen Datenbanken widerspricht mit
    Code:
    SELECT max(nrKu), nrArt
    FROM `temp`
    where knr in (0, $nrKu)
    group by anr
    order by 1 desc
    kannst du wenigstens die Daten für einen bestimmten Kunden rauskriegen. Aber wie gesagt, ich würde die spezifischen Artikel löschen, die auch in den Allgemeinen drin stehen. Die machen absolut keinen Sinn.
    Gruss
    L

    Kommentar


    • #3
      Hallo!

      Vielen Dank für den Code. Ich denke auch, dass man diese Tabelle besser aufbauen könnte. Sie basiert auf einer text-datei mit daten, die täglich in die datenbank eingespielt wird. Der Aufwand war so halt am geringsten, da die datenmenge nicht sehr gross ist.

      So sieht die Sache aus: Es gibt ein Anzahl Artikel und eine Anzahl Kunden. Manche Kunden bekommen einen Teil der Artikel zu besonderen Konditionen, die übrigen Artikel zum Normalpreis. In jeder Tabellezeile stehen also die KunNr, ArtikelNr und der Preis. Da ein Artikel bei unterschiedlicher KunNr auch unterschiedlich viel kostet, steht das halt alles doppelt drin (weil es halt so aus dem import file kommt).

      Zitat von lazydog
      Code:
      SELECT max(nrKu), nrArt
      FROM `temp`
      where knr in (0, $nrKu)
      group by anr
      order by 1 desc
      könntest du mir vielleicht noch kurz erklären, wie dieser code funktioniert? Vor allem das mit der "where in" clause?

      Schöne Grüsse
      Guntram

      Kommentar


      • #4
        Das ist etwa dasselbe, wie
        Code:
        where nrKu = $nrKu or nrKu = 0
        Da das Ganze nach Artikelnummer gruppiert ist, erscheint jede Artikelnummer nur einmal, mit der entsprechend höchsten Kundennummer. D.h. wenn $nrKu = 5 ist, erscheinen alle Artikel, die Kunde 5 angeboten bekommt.
        Gruss
        L

        Kommentar

        Lädt...
        X