PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   SQL / Datenbanken (https://www.php-resource.de/forum/sql-datenbanken/)
-   -   Doppelten Eintrag in relation zu anderer Spalte (https://www.php-resource.de/forum/sql-datenbanken/52129-doppelten-eintrag-in-relation-zu-anderer-spalte.html)

skalu 20-03-2005 23:07

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?

Shurakai 20-03-2005 23:38

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....

mrhappiness 21-03-2005 07:38

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


skalu 21-03-2005 11:48

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

Quetschi 21-03-2005 11:51

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

skalu 21-03-2005 11:55

@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

mrhappiness 21-03-2005 11:59

Zitat:

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.

Zitat:

Und in "fehler" wird nur der Wert von count(DISTINCT datum) temporärgespeichert, oder?
Ja
Zitat:

Gehört da nicht ein "as fehler" hin?
Nein

skalu 21-03-2005 12:01

alles klaro, danke!


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:05 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG