Menü

  Login

  Shoutbox

  Forum » Fragen zu Ilch » Andere Dinge » LEFT JOIN Abfrage


LEFT JOIN Abfrage
corian
Grünschnabel

User Pic

Posts: 21
# 06.10.2013 - 20:47:43
    zitieren



Hallo Mairu,
ich habe da mal ein kleines Problem, wo ich leider nicht weiter komme.
Hier erst mal meine Tabellenstruktur.

Tabelle friends
############
uid # fid
############
1 # 2
2 # 3

Tabelle stream // uid = fid aus tabelle friends
#########################################
uid # fid # action # primary_link # date_recorded
#########################################
1 # 2 # folgt jetzt # /designer-detail- # 2013-10-06 16:13:58
2 # 3 # folgt jetzt # /designer-detail- # 2013-10-06 17:18:06


Ok, jetzt zu der Abfrage. Der User 1 welcher als Freund User 2 hat soll die Ausgabe der Tabelle stream bekommen aber zu der Zeilen welche mit der fid von Tabelle friends übereinstimmt und das ganze noch per Zeit geordnet.

So, zuerst hatte ich es so versucht.
 Php
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
  <?php

$abf 
"SELECT fid FROM prefix_friends WHERE uid = '$uid'";
    
$result db_query($abf);
    while(
$r db_fetch_assoc($result) ) {
    
         
$sel "SELECT uid,fid,action,primary_link,date_recorded FROM prefix_stream WHERE fid=" $r['fid']." order by id DESC  " ;
         
$res db_query($sel);
         while(
$rows db_fetch_assoc($res) ) {
         
$name db_result(db_query("SELECT name FROM prefix_user WHERE id = ".$rows['fid']),0,0);
            
$uname db_result(db_query("SELECT name FROM prefix_user WHERE id = ".$rows['uid']),0,0);
    
$stream .= '<li><span><b>'.$rows['date_recorded'].'</span></b>     &nbsp;'.$name.' &nbsp;'.$rows['action'].'&nbsp;'.$rows['primary_link'].''.$uname.'</li>';
    
    
         }
         
         
    }

?>


Da ich aber erst die fid aus Tabelle friends selectiere ist das order by date_recorded hinfällig.

Jetzt dachte ich mir, das müsste doch auch mit einer LEFT JOIN Abfrage gehen?
Jetzt sieht meine Abfrage momentan so aus.

 Php
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
  <?php
$ab 
"SELECT a.fid,a.uid,u.uid,u.fid,u.action,u.primary_link,u.date_recorded 
            FROM prefix_friends AS a 
            LEFT JOIN prefix_stream u ON a.uid = u.fid
            WHERE u.uid=" 
$uid." order by u.date_recorded  DESC  " ;
       
$re db_query($ab) or die (mysql_error()); 
        while(
$er db_fetch_assoc $re) ) {
        
        
$name db_result(db_query("SELECT name FROM prefix_user WHERE id = ".$er['uid']),0,);
    
        
         
$fname db_result(db_query("SELECT name FROM prefix_user WHERE id = ".$er['fid']),0,);
    
    
$stream .= '<li><span><b>'.$er['date_recorded'].'&nbsp;'.$name.'&nbsp;'.$er['action'].'&nbsp;'.$er['primary_link'].'&nbsp;'.$fname.'</span></b> ';
    
    }
?>


Funktioniert aber auch nicht...

Ich weiss momentan nicht wie ich es am besten angehen soll...
Vielleicht kannst du mir ja weiterhelfen?

Ich hoffe nur, ich habe es gut erklären können, wie ich die Abfrage gerne haben möchte. Zwinker
wenn nicht, einfach noch mal nachfragen Smilie

Mfg corian

„Dumme Fragen gibt es nicht, dumm ist nur, wer nicht fragt.“
Mairu
Administrator

User Pic

Posts: 1908
# 06.10.2013 - 23:00:14
    zitieren



Anhand deines ersten Codebeispieles, müsste die Join Bedingung a.fid = u.fid sein.
Weiter könnte anstatt eines LEFT JOINs eher ein INNER JOIN angebracht sein, somit werden wirklich nur die Ergebnisse angezeigt, wo zu einer fid in friends auch eine fid in stream existiert.
corian
Grünschnabel

User Pic

Posts: 21
# 07.10.2013 - 09:37:39
    zitieren



Hallo Mairu, vielen Dank ja so einfach kann es manchmal sein. Mit INNER JION funktioniert das Ganze super. Smilie

„Dumme Fragen gibt es nicht, dumm ist nur, wer nicht fragt.“