DISTINCT und überhaupt

Nabend,

in meiner Verzweiflung wende ich mich schließlich an euch :wink:

Also, ich habe 2 Tabellen:

Tabelle 1

[code]--------------
| id | title |

| 1 | Bla |
| 2 | Bla2 |[/code]Tabelle 2

[code]-----------------------------------
| id | fid | date | title |

| 1 | 1 | 143456 | Hier und so |
| 2 | 1 | 435868 | Bdlllaaa |
| 3 | 2 | 322455 | … Aja |
| 4 | 2 | 012343 | Hmpfa! |[/code]Ich benötige jetzt für jede Tabelle1.id einen Datensatz aus Tabelle 2 mit dem höchsten Wert im Feld date.

Optimal wäre also folgendes Ergebnis:

[code]-----------------------------------
| id | fid | date | title |

| 2 | 1 | 435868 | Bdlllaaa |
| 3 | 2 | 322455 | … Aja |[/code]
Ich komme einfach auf keine passende Idee.
Hat jemand evtl. einen Lösungsansatz?

Hoffende Grüße
Voodoo

Sorry, aber kann noch nicht ganz folgen, du brauchst aus der Spalte id der Tabelle 1 einen höheren Wert der Tabelle 2?

MfG Marcel

Ah… sorry. Ganz vergessen. Tabelle1.id und Tabelle2.fid sind verknüpft. Oder sollten es bei der Abfrage werden.
Und jetzt suche ich für jede id der Tabelle1 EINEN Datensatz aus Tabelle2, der im Vergleich zu anderen Datensätzen in Tabelle 2 mit der gleichen fid, den höchsten Wert im Feld date hat.

Also sozusagen id Tabelle 1 - höchster Wert date Tabelle 2?

Marcel

Ja. Also, ich denke, dass du das meinst, was ich hoffe erklärt zu haben. :wink:

Also halt erstmal Datenbank verbindung herstellen!

Tabelle 2
[PHP]<?php
$sql = „SELECT date FROM Tabelle2“;
$result = mysql_query($sql);
$row = mysql_fetch_object($result);
echo max($row->date);[/PHP]
Damit hättest du die größte Zahl der Tabelle 2 (theoretisch)

MfG Marcel

Jaja, aber ich suche zu jeder id der Tabelle1 den Datensatz aus den verknüpften Datensätzen der Tabelle 2, der den höchsten Wert in date hat. Also bei 2 IDs in Tabelle 1 sollte ich im Ergebnis auch 2 Datensätze haben.

Sorry, ganz ehrlich gesagt, kenne ich mich mit verknüpfung in der hinsicht nicht aus! Aber vielleicht hab ich dir trotzdem irgendwie helfen können.

MfG Marcel

JOINs z.b.

SELECT argument FROM tabelle1, tabelle2.argument INNER JOIN tabelle2 ON tabelle1.primärschlüssel = tabelle2.fremdschlüssel

so z.b. aus tabelle1 muss nur noch der zugehörige schlüssel von tabelle2 gleichgesetzt werden. sowas nennt man referenzielle integrität.

Nils aka XraYSoLo

Danke für deine Antwort Xray, an JOINs hatte ich auch schon gedacht.
Allerdings habe ich so leider nachher immernoch alle anderen Datensätze aus Tabelle2 - nicht nur die, die den höchsten Wert in date haben.
Ich bräuchte quasi etwas, das immer nur einen bestimmten Datensatz aus Tabelle 2 mit dem aus Tabelle1 verbindet.

An join hatte ich auch zuerst gedacht, aber versuch es mal mit UNION: MySQL :: MySQL 5.1 Referenzhandbuch :: 13.2.7.2 UNION

Hi!

SELECT * FROM
    (SELECT fid, MAX(date) AS maxdate FROM beta GROUP BY fid) maxquery,
    beta
WHERE beta.fid = maxquery.fid AND beta.date = maxquery.maxdate

Zuerst werden alle höchsten date-Werte gesucht. Dann werden alle Date-Werte mit dem höchsten verglichen. alpha ist Tabelle1 und beta Tabelle2.

Grüße, Eric

Vielen Dank! Es funktioniert tatsächlich!

Gruß
Voodoo