Hallo Community,
ich denke ihr könnt mir sicher dabei helfen eine Vorhandene Query zu optimieren.
Ich habe 2 Tabellen:
[songs]
-> id (int)
-> MD5 (varchar)
-> Name (varchar)
-> deleted (datetime)
: INDEX ( id, MD5 )
[report]
-> id (int)
-> played (datetime)
-> songmd5 (varchar)
: INDEX ( id, songmd5 )
In der songs Tabelle werden Song abgelegt oder es können songs gelöscht werden.
Dabei wird der Datensatz nicht gelöscht sondern lediglich das Feld deleted auf (NOW) aktualisiert.
Standardwert von deleted ist '0000-00-00 00:00:00'.
Das heißt es können mehrere Datensätze mit dem selben MD5 in der Tabelle existieren jedoch nur einer mit dem deleted Wert '0000-00-00 00:00:00'.
Nach einem abspielen des Songs wird in die Tabelle report ein Datensatz eingefügt mit dem md5 namen des Songs.
Ich möchte nun in einer Abfrage eine Liste erhalten welche songs in einem bestimmten Zeitraum abgespielt wurden, wobei das Feld songmd5 den zugehörigen Namen aus der Tabelle songs anzeigen soll.
Das klappt auch soweit mit meinem Query:
Die Abfrage zeigt mir jedoch bei doppelten MD5 aus der Tabelle songs doppelte Ergebnisse an.
Ich möchte jedoch das mir nur der Name aus der Tabelle songs angezeigt wird der zum Zeitpunkt `played` gerade aktuell war.
Hier mal ein Beispiel und das Ergebniss mit nachfolgendem gewünschten Ergebniss:
[songs]
{id} {MD5} {Name} {deleted}
1 | 77266637887 | Song1 | 2009-01-27 04:00:00
2 | 77266637887 | Song2 | 2009-01-27 06:00:00
3 | 77266637887 | Song3 | 0000-00-00 00:00:00
4 | 55511155554 | Song7 | 0000-00-00 00:00:00
5 | 88888888888 | Song9 | 0000-00-00 00:00:00
[report]
{id} {played} {songmd5}
1 | 2009-01-27 03:00:00 | 77266637887
2 | 2009-01-27 04:00:00 | 55511155554
3 | 2009-01-27 05:00:00 | 77266637887
4 | 2009-01-27 07:00:00 | 77266637887
5 | 2009-01-27 08:00:00 | 55511155554
6 | 2009-01-27 08:00:00 | 88888888888
7 | 2009-01-27 09:00:00 | 98776565564
Abfrage:
Ergebniss:
Gewünschtes Ergebniss:
Das Problem besteht also darin das die Abfrage nicht nachprüft welcher song zu dem Zeitpunkt aktuell war.
Ich habe mehrere Versuche gestartet um die doppelten Einträge zu Filtern jedoch ohne nennens werte Ergebnisse.
Ich hoffe ich habe alles soweit richtig und verständlich geschildert.
Wenn nicht dann fragt mich bitte.
Ich hoffe ihr könnt mir dabei helfen.
Mit freundlichen Grüßen
Postaria
ich denke ihr könnt mir sicher dabei helfen eine Vorhandene Query zu optimieren.
Ich habe 2 Tabellen:
[songs]
-> id (int)
-> MD5 (varchar)
-> Name (varchar)
-> deleted (datetime)
: INDEX ( id, MD5 )
[report]
-> id (int)
-> played (datetime)
-> songmd5 (varchar)
: INDEX ( id, songmd5 )
In der songs Tabelle werden Song abgelegt oder es können songs gelöscht werden.
Dabei wird der Datensatz nicht gelöscht sondern lediglich das Feld deleted auf (NOW) aktualisiert.
Standardwert von deleted ist '0000-00-00 00:00:00'.
Das heißt es können mehrere Datensätze mit dem selben MD5 in der Tabelle existieren jedoch nur einer mit dem deleted Wert '0000-00-00 00:00:00'.
Nach einem abspielen des Songs wird in die Tabelle report ein Datensatz eingefügt mit dem md5 namen des Songs.
Ich möchte nun in einer Abfrage eine Liste erhalten welche songs in einem bestimmten Zeitraum abgespielt wurden, wobei das Feld songmd5 den zugehörigen Namen aus der Tabelle songs anzeigen soll.
Das klappt auch soweit mit meinem Query:
Code:
SELECT played, Name AS File From reports left join songs on reports.songmd5 = songs.MD5 where `played` >= '2009-01-27 00:00:00' AND `played` <= '2009-01-27 15:00:00'
Ich möchte jedoch das mir nur der Name aus der Tabelle songs angezeigt wird der zum Zeitpunkt `played` gerade aktuell war.
Hier mal ein Beispiel und das Ergebniss mit nachfolgendem gewünschten Ergebniss:
[songs]
{id} {MD5} {Name} {deleted}
1 | 77266637887 | Song1 | 2009-01-27 04:00:00
2 | 77266637887 | Song2 | 2009-01-27 06:00:00
3 | 77266637887 | Song3 | 0000-00-00 00:00:00
4 | 55511155554 | Song7 | 0000-00-00 00:00:00
5 | 88888888888 | Song9 | 0000-00-00 00:00:00
[report]
{id} {played} {songmd5}
1 | 2009-01-27 03:00:00 | 77266637887
2 | 2009-01-27 04:00:00 | 55511155554
3 | 2009-01-27 05:00:00 | 77266637887
4 | 2009-01-27 07:00:00 | 77266637887
5 | 2009-01-27 08:00:00 | 55511155554
6 | 2009-01-27 08:00:00 | 88888888888
7 | 2009-01-27 09:00:00 | 98776565564
Abfrage:
Code:
SELECT played, Name AS File From reports left join songs on reports.songmd5 = songs.MD5 where `played` >= '2009-01-27 00:00:00' AND `played` <= '2009-01-27 15:00:00'
Code:
2009-01-27 03:00:00 | Song1 2009-01-27 03:00:00 | Song2 2009-01-27 03:00:00 | Song3 2009-01-27 04:00:00 | Song7 2009-01-27 05:00:00 | Song1 2009-01-27 05:00:00 | Song2 2009-01-27 05:00:00 | Song3 2009-01-27 07:00:00 | Song1 2009-01-27 07:00:00 | Song2 2009-01-27 07:00:00 | Song3 2009-01-27 08:00:00 | Song7 2009-01-27 08:00:00 | Song9 2009-01-27 09:00:00 | NULL
Gewünschtes Ergebniss:
Code:
2009-01-27 03:00:00 | Song1 2009-01-27 04:00:00 | Song7 2009-01-27 05:00:00 | Song2 2009-01-27 07:00:00 | Song3 2009-01-27 08:00:00 | Song7 2009-01-27 08:00:00 | Song9 2009-01-27 09:00:00 | NULL
Ich habe mehrere Versuche gestartet um die doppelten Einträge zu Filtern jedoch ohne nennens werte Ergebnisse.
Ich hoffe ich habe alles soweit richtig und verständlich geschildert.
Wenn nicht dann fragt mich bitte.
Ich hoffe ihr könnt mir dabei helfen.
Mit freundlichen Grüßen
Postaria
Kommentar