MYSQL + Frage zu Select "join 2er Tabellen"

P_H_I_L

Erfahrenes Mitglied
Hallo Zusammen,
habe ein kleines Problem und weiß nicht wie ich meinen Select schreiben soll...
Weiß einfach nicht nach was ich googeln soll um eine passendes Beispiel zu bekommen. Vielleich kann mir ja hier jemand helfen..

Ich habe 2 Tabelle:

1 Tabelle (Person)
2 Tabelle (Bilder_Person)

Will nun einen Select absetzen, der mir genau 1 Zeile bringt! Doch mein Problem ist, dass Jede Person 5 Bilder hat! also 5 Rows in der Tabelle "Bilder_Person"! Somit wenn ich schreibe:
Code:
select * from Person, Bilder_Person Where Person.id = Bilder_Person.id_ref  And Person.id = 1;

--> Bekomme ich 5 Zeilen. Wie kann ich den Join durchführen um nur eine Zeile zu bekommen. Mit z.B dem ersten Bild!

Ideen?
(Bestimmt voll simple, ich komm nur ned drauf :( )

Gruß,
Phil
 
Habs sofort ausprobiert! ISt aber nicht das was ich genau suche, denke ich.
Weil wenn ich Limit 1 angebe, bekomme ich nur eine Zeile zurück.
Aber das will ich ja nicht,

ich will alle Personen im System selektieren. Und jede Person kann bis zu fünf Fotos haben. Das heißt, zu jeder Person soll aber nur das erse Foto selektiert werden.

Bei 3Personen im System will ich dann z.B 3 Treffer haben.


Versteht ihr mich?
 
Hallo P_H_I_L,

klar verstehe ich dich.

Was du machen must ist, in einem SubSelect erstmal für jede Person einen Eintrag aus Bilder_Person selektieren. Dafür brauchst du aber ein Kriterium, wie z.B. Datum, Reihenfolge oder Ähnliches (kenne die Felder in der Tabellen nicht) um dann gruppiert mit z.B. Max oder Min dir je einen Datensatz zu holen.
Mit diesem Ergebnis machst du dann einen Join auf Person.
 
Zuletzt bearbeitet:
Hallo,
habe es nun wieder versucht, doch kriege den selekt nicht hin. verzweifle schon fast. :-(

kann mir denn irgendjemand helfen oder sogar den select- schreiben bzw. mir den ansatz schreiben. ..

Normalerweise löse ich gerne mein Probleme gerne selbst, aber komme so einfach nicht weiter. sorry!

mein tabellen:

1 Tabelle: personen (spalten: id_person, vorname, nachname)
2 Tabelle: bilder_personen (spalten: id_bilder, url_bild, id_person_ref)

(Verbindung der beiden Tabellen ist die bilder_personen.id_person ref = personen.id_person)

Was will ich selektieren:
- alle Personen in der Tabelle. Und zu jeder Person 1 Bild. (jede Person hat 5 Bilder)

Bei einem normalen Join komm ich auf 10 Treffer, da derzeit 2 Personen angelegt sind. ich will aber nur 2 treffer bekommen. Nämlich die 2 Personen mit nur einem Bild..

Kann mir jemand helfen?

Danke,
Philipp
 
Hallo P_H_I_L,

versuchs mal so:
Code:
SELECT  personen.vorname, personen.nachname, bilder_personen.url_bild
FROM bilder_personen 
INNER JOIN
	(SELECT id_person_ref, MAX(id_bilder) AS id_bilder
         FROM bilder_personen
         GROUP BY id_person_ref) AS maxID 
ON bilder_personen.id_bilder = maxID.id_bilder 
INNER JOIN personen ON maxID.id_person_ref = personen.id_person
oder so
Code:
SELECT personen.vorname, personen.nachname, bilder_personen.url_bild
FROM bilder_personen 
INNER JOIN (SELECT id_person_ref, MAX(id_bilder) AS id_bilder
            FROM bilder_personen
            GROUP BY id_person_ref) AS maxID 
ON bilder_personen.id_bilder = maxID.id_bilder 
RIGHT OUTER JOIN personen 
ON maxID.id_person_ref = personen.id_person
 
Zuletzt bearbeitet:
Hi,
danke. ich versuchs heut abend gleich mal aus obs klappt..
Aber schon mal vielen vielen dank...
 
Hallo P_H_I_L,

klappen wird das, habs ja getestet.

Nur die Bedingung zu Auswahl eines der Bilder ist pro Person ist jetzt das mit der höchsten ID (bilder_id), also immer das neuste Bild.
Wenn das ausreichend ist, ok sonst brauchst du zumindest ein weiteres Feld für eine Bedingung (siehe mein Post vom 20.07.09 09:40)
 
Zurück