Daten aus zwei Tabellen afragen.

thefaxx

Mitglied
Hallo,

folgendes beschäftigt mich nun seit einiger Zeit.

In einer Tabelle sollen diverse Domainnamen mit dem letzen Zugriffszeitpunkt angezeigt werden.

Tabelle 1
+------------------------------+
| id | domain |
+--+--------------------------+
| 1 | test.de |
+------------------------------+

Tabelle 2
+------------------------------+
| id | pid | tstamp |
+--+--------------------------+
| 1 | 1 | 1289241797 |
+------------------------------+
| 2 | 1 | 1289241785 |
+------------------------------+
| 3 | 1 | 1289225458 |
+------------------------------+

Wie bekomme ich nun eine Liste der Domain aus Tabelle 1 mit jeweils dem neuesten Zugriff aus Tabelle 2? INNER JOIN funktioniert leider nicht, da die Anzahl der Einträge übereinstimmen muss.

Bin dankbar für jede Hilfe.
 
Ich geh mal davon aus, du arebitest mit MySQL

1) Eine Unterabfrage erstellen, die mit GROUP BY und MAX() pro domain den neusten tstamp ermittelt.
2) Diese Unterabfrage über ein LEFT JOIN mit der Tabelle 1 verbinden. Wenn alle domains die keinen Eintrag in Tabelle2 haben unterdrückt werden sollten, dann ein INNER JOIN

SQL:
SELECT
	t1.*,
	t2.max_tstamp
FROM
	table1 AS t1
	LEFT JOIN (SELECT
					pid,
					MAX(tstamp) AS max_tstamp
				FROM
					table2
				GROUP BY pid) AS t2
		ON t1.id = t2.pid
 
Zuletzt bearbeitet von einem Moderator:
Jetzt habe ich doch noch eine Frage. Sagen wir ich möchte nur Tabelle 2 abfragen und für jede pid jeweils nur den neuesten Eintrag erhalten. Wie könnte man das machen?

Hier mein Versucht:
SQL:
SELECT * FROM tabelle2 WHERE pid IN (2,3,4,5) AND MAX(tstamp) ORDER BY pid
 
Zuletzt bearbeitet von einem Moderator:
Habe eben selber die Lösung gefunden:

SQL:
SELECT * FROM table2 t1 JOIN
						(SELECT pid, MAX(tstamp) AS tstamp
						FROM table2 t2 GROUP BY pid) lastEntry
						WHERE t1.pid = lastEntry.pid AND t1.tstamp = lastEntry.tstamp AND t1.pid IN (2,3,4,5)
 
Zuletzt bearbeitet von einem Moderator:
Zurück