Doppelten Eintrag in relation zu anderer Spalte

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

  • Doppelten Eintrag in relation zu anderer Spalte

    Hi Leute!

    Entschuldigt den eigenartigen Betreff, aber ich habe keine Ahnung, wie das kurz zu erklären ist

    Also: Ich habe eine Auftragstabelle, in der pro Artikel ein Datensatz steht. Nun möchte ich prüfen, ob es eine Auftragsnummer mehrfach gibt --> natürlich gibt's die mehrfach, weil es ja pro Artikel einen Datensatz gibt, also bei einem Auftrag von 10 Artikeln gibt es die Auftragsnummer 10 Mal.

    Nun könnte ich aber über den Auftrags-Timestamp das Ganze prüfen. Die Auftragsnummer darf es nicht mit mehr als einem Timestamp geben (also z.B. nicht 2 unterschiedliche), nur weiß ich nicht, wie ich das mit SQL lösen kann.

    Also z.B. Auftragsnummer 40003 gibt es 10 Mal mit dem Timestamp 1111355902. Jetzt darf es aber die Nummer 40003 nur mit dem Timestamp 1111355902 geben, da es sonst zwangsläufig ein anderer Auftrag wäre.

    Ist das mit SQL lösbar?

  • #2
    Du möchtest prüfen, ob es eine Auftragsnummer mit unterschiedlichen Timestamps gibt?

    SELECT COUNT( * ) FROM tabelle WHERE auftragnummer = 4003 AND timestamp != der_richtige_timestamp


    würde dir zählen wie oft es diese falschen einträge gibt....
    Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
    var_dump(), print_r(), debug_backtrace und echo.
    Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
    Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
    Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

    Kommentar


    • #3
      Und wenn du das nicht für jede Auftragsnummer machen möchtest...

      Code:
      SELECT 
        aufnr,
        COUNT(DISTINCT datum) fehler
      FROM auftraege
      GROUP BY aufnr
      HAVING fehler > 1
      Ich denke, also bin ich. - Einige sind trotzdem...

      Kommentar


      • #4
        Toll danke euch beiden! Es funktioniert!

        @mrhappiness

        Mir ist nur nicht ganz klar, wieso Ich habe mal nachgelesen, was DISTINCT macht. Es verhindert, dass Einträge doppelt ausgelesen werden, richtig? Was ist dann der Unterschied zu GROUP BY?

        Und in "fehler" wird nur der Wert von count(DISTINCT datum) temporärgespeichert, oder? Gehört da nicht ein "as fehler" hin?

        Danke dir!

        Greetz Lukas

        Kommentar


        • #5
          Hallo,

          mir kommt deine Vorgehensweise etwas holprig vor. Was ist z.B. wenn bei dem Insert des Auftrags der Server unter Last steht und das ganze mal etwas langsamer abgeht, dann könnte es sein, dass die Aufträge mit der gleichen Auftragsnummer einen unterschiedlichen Timestamp erhalten obwohl sie doch zusammengehören.

          Die Art und Weise wie du zusammengehörige Artikel zu einem Auftrag erkennen willst würde ich mir nochmal überlegen. Du solltest einfach am besten dafür sorgen dass die '10' aus deinem Beispiel kein zweites mal mehr vorkommen kann.

          Gruss
          Quetschi
          Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
          Schön - etwas Geschichte kann ja nicht schaden.
          Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

          Kommentar


          • #6
            @Quetschi

            Danke für deinen Hinweis! Theoretisch hast du Recht. Aber die Aufträge werden lokal auf einem Computer erfasst und dann erst über ein Textfile übertragen. Und es wird auch zu 99,9% nie vorkommen, dass es eine Auftragsnummer wirklich mehrfach gibt, aber prüfen möchte ich das trotzdem. Maximal kann es sich da um 1-2 Sekunden Zeitdifferenz handeln und das könnte ich dann manuell prüfen!

            Aber trotzdem vielen Dank! Daran hätte ich nicht gedacht!

            Greetz Lukas

            Kommentar


            • #7
              Original geschrieben von skalu
              Ich habe mal nachgelesen, was DISTINCT macht. Es verhindert, dass Einträge doppelt ausgelesen werden, richtig? Was ist dann der Unterschied zu GROUP BY?
              mit DISTINCT bekommst du jede eindeutige Kombination nur genau einmal.
              Mit GROUP BY kannst du Datensätze gruppieren undd abei z. B. zählen.

              Ohne das DISTINCT würde mysql zählen, wieviele Datensätze es pro Auftragsnummer gibt. Durch das DISTINCT wird ein Datensatz dabei nicht mehr berücksichtigt, wenn er (bezühlich der Timestampspalte) bereits einmal miteinbezogen wurden.
              mysql zählt also die Anzahl verschiedener Timestamps je Auftragsnummer.

              Und in "fehler" wird nur der Wert von count(DISTINCT datum) temporärgespeichert, oder?
              Ja
              Gehört da nicht ein "as fehler" hin?
              Nein
              Ich denke, also bin ich. - Einige sind trotzdem...

              Kommentar


              • #8
                alles klaro, danke!

                Kommentar

                Lädt...
                X