MySQL Abfrage von zwei Tabellen

webdoktor

Angesehenes Mitglied
Hallo zusammen

Ich habe eine kleine Frage und zwar habe ich auf unserer Seite
Fotoalben welche man erstellen kann. Diese Alben kann man erstellen
mit den Berechtigungen "Alle ansehen" und "nur Freunde".

Ich habe also zwei Tabellen:

fotoalbum:
id - id_selbst - name - berechtigung

freunde:
id - id_selbst - id_user

Nun möchte ich, eine einzige Abfrage machen, welche so aussieht, dass wenn
eine Fotoalbum den Status 2 hat (also nur Freunde) dass es dann in der Tabelle
freunde schaut, ob man befreundet ist mit der Person d.h. id_selbst muss id_selbst
von dem fotoalbum sein und id_user muss $_SESSION[id] sein.

Wie kann ich das machen? Ich hoffe, ich habe alle Angaben gemacht damit ihr
mir helfen könnt.

Gruss Marco
 
CODE select
a.*
from
fotoalbum a
left join
freunde b
on
a.id_selbst = b.id_selbst
where
(
a.berechtigung <> 2
or
b.id_user='"$_SESSION[id] "'
)



Einfach ein left join zwischen beiden Tabellen. Ein left muss es sein, damit auch die Einträge ohne Einträge auf der Freundestabelle angezeigt werden.
Dann wird zum einen angezeigt was in Fotoalbum eh nicht auf dem Status 2 steht.
Zum anderen wird geschaut ob ein Eintrag in der Freundestabelle besteht und wenn ja ob dieser mit einer UserID gleich der SessionID ausgestattet ist.

Viel Spass!
 
Hey TSc

Wow, dass muss ich gleich ausprobieren.
Vielen herzlichen Dank für die super prompte Antwort.

Muss es dann noch ein ganz wenig anpassen da

id_selbst auch $_SESSION[id] sein kann und
id_user auch id_selbst

Mal schauen ob ich das hinkriege :)

Teste es jetzt zuerst mal mit deinem geposteten Code.

Gruss Marco
 
Hallo TSc

Irgendwie erhalte ich nun alle Alben 10x angezeigt. Komisch!
Der aktuelle Code sieht nun so aus:

CODE //Abfragen der Datenbank
$abfrage_fotoalbum = "select
a.*
from
friends_fotoalbum a
left join
friends_freunde b
on
a.id_selbst = b.id_selbst
where
(
a.berechtigung <> 2
or
b.id_user='$_SESSION[id]'
)";

$ergebnis_fotoalbum = mysql_query($abfrage_fotoalbum);
$anzahl_fotoalbum = mysql_num_rows($ergebnis_fotoalbum);



Gruss Marco
 
Naja, ich kenne zwar MySQL nicht wirklich, aber andere DBMS arbeiten in diesem Zusammenhang mit DISTINCT. Man sollte in diesem Zusammenhang aber auf die Performance achten. Das eliminieren von Dubletten kann mitunter einiges an Zeit kosten.
 
Ufff ich schaffs nicht ganz :)

Der aktuelle status ist so:

QUOTE //Abfragen der Datenbank
$abfrage_fotoalbum = "select
a.*
from
friends_fotoalbum a
left join
friends_freunde b
on
a.id_selbst = b.id_selbst
and
b.id_user = '$_SESSION[id]'

where
(
a.berechtigung <> 2
or
b.id_user = '$_SESSION[id]'

)


";

$ergebnis_fotoalbum = mysql_query($abfrage_fotoalbum);
$anzahl_fotoalbum = mysql_num_rows($ergebnis_fotoalbum);



Fast geht es nur sollte man auch befreundet sein wenn:

a.id_selbst = $_SESSION[id]

und

a.id_user = b.id_selbst

ich schaffe es einfach nicht das es klappt...
grrr :)

Freue mich auf Eure Hilfe...

 
Die Abfrage ob "wir" Freunde sind oder nicht, wird durchgeführt, wenn mir die Fotoalben eines anderen Users angezeigt werden. Richtig?
Dann halte ich einen JOIN an dieser Stelle für vollkommen unangebracht. Verschwendete Zeit, Energie und Ressourcen ;-)

$res = @mysql_query("SELECT user_id from freunde where ich_selbst = '".$_SESSION['id']."' and user_id = '".$profil['user-id']."'
if(@mysql_num_rows($res) == 1) {
$status = 2;
} else {
$status = 1;
}

$result = @mysql_query("SELECT * from fotoalbum where id_selbst = '".$profil['user_id']."' and berechtigung <= '".$status."')
 
Zurück
Oben