2016-07-19 16 views
0

Ich möchte aus einer MySQL-Abfrage, diese Art von Ergebnis erhalten:Mysql Abfrage mit mehreren LEFT JOIN Ausgabe

Name | Gestelltes Datum | Verabschiedet Datum | Dauer

Joe | 2016-07-01 10:02:01 | 2016-07-01 10:02:05 | 10

Ben | 2016-07-01 10:04:24 | 2016-07-01 10:04:26 | 12

....

Alle Einträge werden in einer Tabelle gespeichert, die wie folgt aussehen:

id | action_date | action_type | unique_instance | name 
12 | 2016-07-01 10:02:01 | Asked | 6546532161654 | Joe 
13 | 2016-07-01 10:02:06 | Granted | 6546532161654 | Joe 
14 | 2016-07-01 10:05:12 | Asked | 6546532161654 | Ben 
15 | 2016-07-01 10:05:15 | Granted | 6546532161654 | Ben 
16 | 2016-07-01 10:06:06 | Finished | 6546532161654 | Joe 

Ich habe versucht, diese Abfrage zu tun, aber es hat nicht funktioniert:

Select table.name as Name, 
table.action_date as Asked, 
g.action_date as Granted, 
TIMESTAMPDIFF(SECOND, g.action_date, q.action_date) as Duration 
FROM table 
LEFT JOIN table g ON table.unique_instance = g.unique_instance AND g.action_type = 'Granted' 
LEFT JOIN table q ON table.unique_instance = q.unique_instance AND q.action_type = 'Finished' 
WHERE table.action_type = 'Asked' 
AND table.unique_instance = '6546532161654' 
GROUP BY table.action_date; 
+0

Es sieht so aus, als sollte es funktionieren ... können Sie Ihren Beitrag bearbeiten und Details anzeigen: Wählen Sie * aus der Tabelle wo unique_instance = '6546532161654'. Nur um die tatsächlichen Datensätze in der Datenbank zu bestätigen. – DRapp

+0

Korrigieren Sie mich, wenn ich falsch liege, aber wenn Sie die gleiche Tabelle 3 Mal verwenden, müssen Sie einen Alias ​​für alle 3 von ihnen nicht nur die 2. – apokryfos

+0

@ DRapp, es ist fertig, @ apokryfos, weiß ich nicht: ( –

Antwort

0

Wie in den Kommentaren angegeben.

Ihr Design Ihrer Datenbank scheint falsch zu sein, da Sie nicht einmal Ihre ID verwenden. Sie sind nicht in der Lage zu identifizieren, welcher Datensatz eindeutig und in Bezug auf was ist, aber Sie können immer noch den Namen verwenden, aber es ist nicht eindeutig, da Sie später noch Datensätze mit dem gleichen Namen haben werden.

Mein Vorschlag wäre action_type und ID als Primärschlüssel. Auf diese Weise können Sie immer dieselbe ID verwenden und den action_type entsprechend ändern.

Beispiel (beachten Sie, dass Sie nicht mehr als 1 Datensatz diese enthalten, haben kann):

  1. ID: 1, action_type: Auf die Frage
  2. ID: 1, action_type: Zugegeben
  3. ID: 1 , action_type: Fertige

um Ihren Code zu debuggen, diese Abfrage sollte nur 1 Datensatz zurück:

select * from table where unique_instance = '6546532161654' AND action_type = 'Granted' 

Aber da unique_instance schließlich nicht einzigartig ist, wird es andere unerwünschte Daten ergreifen.

Hinweis: Ihre Anfrage ist korrekt.