Blue Effect
Mitglied
Guten Morgen,
ich experimentiere gerade mit einem Beispiel, bei dem User virtuelle Konten haben.
Dazu gibt es Kontoauszüge (siehe Anhang 1). Ich möchte nun in einer Abfrage alle Auszüge anzeigen lassen, die doppelt vorkommen (heißt user,betrag,waehrung,art,details sind in min. 2 Zeilen gleich).
Das funktioniert auch wunderbar:
Bei doppelten Zeilen kann ich eine neue Transaktion erzeugen, die (mit neuem Zeitstempel) eine Rückbuchung erzeugt (siehe letzte Zeile in der Abbildung). Der Betrag wird also wieder einmal abgezogen und in der Spalte rueckbuchungID wird die ID der Transaktion angezeigt, die rückgängig gemacht wurde.
Wie finde ich nun nur die doppelten Transaktionen, die noch keine Rückbuchung haben?
Ich habe mich an einer Abfrage versucht, allerdings scheint die zu aufwändig zu sein, MySQL braucht Minuten und beendet die Abfrage ohne Antwort.
Mit Joins habe ich nichts passendes finden können, die meisten Beispiele sind mit mehreren Tabellen.
Habt ihr eine Idee, mit welchem Grundsatz ich eine passende Abfrage aufbauen kann?
Danke im Voraus.
ich experimentiere gerade mit einem Beispiel, bei dem User virtuelle Konten haben.
Dazu gibt es Kontoauszüge (siehe Anhang 1). Ich möchte nun in einer Abfrage alle Auszüge anzeigen lassen, die doppelt vorkommen (heißt user,betrag,waehrung,art,details sind in min. 2 Zeilen gleich).
Das funktioniert auch wunderbar:
Code:
SELECT
*, COUNT(*) AS anzahl
FROM
`user_konto_logs`
GROUP BY user,betrag,waehrung,art,details,rueckbuchungID
HAVING COUNT(*)>=2 AND art="wetten+"
ORDER BY zeit DESC
Bei doppelten Zeilen kann ich eine neue Transaktion erzeugen, die (mit neuem Zeitstempel) eine Rückbuchung erzeugt (siehe letzte Zeile in der Abbildung). Der Betrag wird also wieder einmal abgezogen und in der Spalte rueckbuchungID wird die ID der Transaktion angezeigt, die rückgängig gemacht wurde.
Wie finde ich nun nur die doppelten Transaktionen, die noch keine Rückbuchung haben?
Ich habe mich an einer Abfrage versucht, allerdings scheint die zu aufwändig zu sein, MySQL braucht Minuten und beendet die Abfrage ohne Antwort.
Code:
SELECT
*, COUNT(*) AS anzahl
FROM `user_konto_logs`
GROUP BY user,betrag,waehrung,art,details,rueckbuchungID
HAVING
COUNT(*)>=2 AND
art="wetten+" AND
id IN (SELECT rueckbuchungID FROM user_konto_logs WHERE rueckbuchungID>0)
ORDER BY zeit DESC
Mit Joins habe ich nichts passendes finden können, die meisten Beispiele sind mit mehreren Tabellen.
Habt ihr eine Idee, mit welchem Grundsatz ich eine passende Abfrage aufbauen kann?
Danke im Voraus.