2012-11-20 17 views
5

Wählen Sie nur die Zeilen, die ein anderes Ergebnis als die zuvor ausgewählte Zeile haben? In einer meiner Tabellen speichern ich Werbungsdaten, das ist eine Zeile pro Werbung. Ich speichere auch in einer anderen Tabelle die Preise für Miete pro Tag, Woche, Monat, diese Tabelle enthält mehr als eine Zeile pro Anzeige. Ich möchte alle Zeilen aus Tabelle 2 auswählen, bei denen eine Änderung in einem der Preise (im Beispiel Zeile 1 und 3 in Tabelle 2) in derselben Abfrage wie die Datenauswahl erfolgt. Ich weiß, dass ich eine GROUP_CONCAT verwenden muss, um in diesem Fall eine Zeile anstelle von 2 Zeilen zu erhalten, aber wie bekomme ich 2 Ergebniszeilen aus Tabelle 2 und 1 Ergebniszeile insgesamt?Mysql-Abfrage nur Zeilen mit eindeutigen Ergebnis innerhalb von GROUP_CONCAT

Das Ergebnis der Abfrage hat so etwas wie sein: tre, 234,“12345678911,12,45, 32555678911,12,67“

Table 1 (advertisements) 
ID_adv  data1  data2 
1  tre  234 
2  ghj  34 
3  jk  098 
4  jfjk  12 

Table 2 (dates) 
ID_dates ID_adv  timestamp_day price1  price2 
1  1  12345678911  12  45 
2  1  22345677771  12  45 
3  1  32555678911  12  67 
4  2  42345671231  34  34 

I

versucht
SELECT 
t1.*, 
GROUP_CONCAT(t2.date) AS dates 
FROM Table1 t1 
LEFT JOIN Table2 t2 ON t2.ID_adv = t1.ID_adv 
WHERE t1.ID_adv = 3 GROUP BY t1.ID_adv 

Antwort

2

Können Sie versuchen, dieses:

SELECT T3.ID_adv 
    , T3.data1 
    , T3.data2 
    , CAST(GROUP_CONCAT(CONCAT(T3.timestamp_day, ',', T3.price1, ',', T3.price2)) AS CHAR) AS DatePrice 
    FROM (
     SELECT T1.* 
      , MIN(T2.timestamp_day) AS timestamp_day 
      , T2.price1 
      , T2.price2 
      FROM Table1 T1 
      LEFT JOIN Table2 T2 ON T2.ID_adv = T1.ID_adv 
      GROUP BY T1.ID_adv, T2.price1, T2.price2 
    ) T3 
    GROUP BY T3.ID_adv; 

ich habe es versucht, auf SQL Fiddle.

Verwandte Themen