if statemaent mit 2 tabellen

hups1803

Erfahrenes Mitglied
hallo,

folgendes problem.

ich möchte gerne meine user datenbank mit einer friendlist datenbank vergleichen,

er soll nur die ausgeben die in der friendlist db im feld fromuserid nicht enthalten sind.

friendlist db
friendlist.png

user db

user.png


PHP:
//abfrage Friendlist
$sqlall = new db;
$sqlall -> db_Select("blogtime_friendslist", "*");
$rowall = $sqlall-> db_Fetch();
$friendslistid = $rowall['fromuserid'];


//abfrage user db

//user_id !=".USERID."  damit verhindere ich das ich selbst angezeigt werde


$sqluser = new db;
			$sqluser->db_Select("user", "*","user_id !=".USERID."");//USERID id des eingelogten users
			while($rowuser = $sqluser-> db_Fetch()){
				$usernameuser=$rowuser['user_name'];
				$useriduser=$rowuser['user_id'];
				$userimageuser=$rowuser['user_image'];
				$usersessuser=$rowuser['user_sess'];

echo "<div class='anfrage".$useriduser."'style='margin:15px'>".$ava."&nbsp;".$usernameuser." <input type='checkbox' value='".$useriduser."' id='akzept".$useriduser."'></div>";
}

weiss nicht wie das gehen soll

habe die abfrage zeile so geändert

PHP:
	$sqluser->db_Select("user", "*","user_id NOT IN (SELECT fromuserid FROM e107_blogtime_friendslist )");

das geht soweit nur soll er nur die felder prüfen welche die userid zb 1 (bzw USERID )in der friendlist hat
 
Zuletzt bearbeitet:
Moin,

erstmal habe ich habe ich keine Ahnun was du für eine MySQL Klasse verwendest.
Ich würde das Ganze mit Subquerys lösen.

Ich denke, in dieser Form kommst du nicht weit.
 
Ich denke, das bekommst man mit einem LEFT JOIN + IS NULL hin. Vollkommen ungetestet und aus dem Bauch raus...

Code:
SELECT u.*, f.id FROM userdb u
LEFT JOIN friendlist f ON f.fromuserid = u.id
WHERE f.id IS NULL;

Ich hätte es wirklich gern getestet bevor ich sowas poste, aber ich habe keine Test-Daten.
 
Die Lösung von saftmeister sollte funktioneren. Nur würde ich f.id aus dem SELECT-Teil weglassen. Denn diese Spalte muss dank dem WHERE-Teil immer NULL sein....
 
hallo Danke für die Hilfe

habe es so versucht

PHP:
// die id der e107_user tabelle == user_id
/**
* Die e107_blogtime_friendslist ist so aufgebaut

* `id` int(11) NOT NULL AUTO_INCREMENT,
*   `userid` int(11) DEFAULT NULL,
*   `username` varchar(55) DEFAULT NULL,
*   `freundesstatus` varchar(255) DEFAULT '0',
*   `fromuserid` int(11) DEFAULT NULL,
*   `timestamp` varchar(55) DEFAULT NULL,
*/

$sqluser = new db;
$sqluser = "

 SELECT 

            u.*, f.user_id FROM e107_user u

LEFT JOIN 

                e107_blogtime_friendslist f ON f.fromuserid = u.user_id

WHERE 
               f.user_id IS NULL;";

		   $res1 = mysql_query($sqluser);
 while($rowuser = mysql_fetch_array($res1)){

bekomme so garnix angezeigt, komme da irgendwie mit den id's nicht klar was da was ist

so habe ich eine ausgabe

PHP:
$sqluser = new db;
$sqluser = "
SELECT 

           u.*, f.id FROM e107_user u

LEFT JOIN 
 
          e107_blogtime_friendslist f ON f.fromuserid = u.user_id

WHERE
 
         f.userid IS NULL;";

            $res1 = mysql_query($sqluser);
while($rowuser = mysql_fetch_array($res1)){

wobei mir aber der user Muckel nicht angezeigt wird

DB der friendlist

db-friendlist.png


Anzeige Ausgabe

ausgabe.png
 
Zuletzt bearbeitet:
Warum speicherst du in der freindlist nochmal den username? das ist doche ine redundanz zur user-Tabelle...
 
@alxy weil ich das beim testen vorher schon drinne hatte

komisch ist wenn zb. der user Muckel schon einen freund hat wird der nicht mehr angezeigt

die abfrage muss nach der USERID schauen.

Wenn der user mit der USERID zb 1 Muckel als freund hatt dann nicht anzeigen sonst ja.

so wie die Abfrage jetzt ist werden nur die angezeigt die in der tabelle Friendlist sind nicht vorhanden sind .


@Yaslaw Sorry!, wieder erwischt.

hallo,

hier nochmal zum besseren verständniss

ausgabe.png

habe mir es jetzt so zusammengebaut

PHP:
$sqluser = "
select 

    * from e107_user 

where 

       user_id not in( select id from (

select 

       fromuserid as id from e107_blogtime_friendslist where userid = 1 union select userid from e107_blogtime_friendslist 

where 

       fromuserid = ".USERID." union select 1) foo )";

vieleicht bist du so nett und sagst mir noch wie ich das anstellen muss,
das er nun in die friendlist mit status 2 schaut und für die jeweilige id des User der grad on ist ".USERID.",

(ausser er selbst) entweder freund.png oder add-freund.png anzeigt.

Das währe SUPER

habe das so versucht

bekomme das nicht gebacken, da die abfrage der commentare in einer while schleife sitz

er zeigt mir entweder nicht alle meine freunde richtig an oder keinen .

PHP:
//das ist die ursprungs schleife 

$page= $_GET['page'];
$urlblogs=$_GET['urlblogs'];

if($page==2){$meine='WHERE userid='.USERID;}
elseif($page==1){$meine='';}
elseif{$page=='blogs'){$meine='WHERE userid='.$urlblogs.''; }

$sql = new db;

$sql = "
SELECT
 
         * FROM ".MPREFIX."blogtime ".$meine." ORDER BY id DESC";

$res = mysql_query($sql);

while($row = mysql_fetch_array($res)){


//dann kommt die friendlist Abfrage

$friendsql = new db;
$friendsql = "
               SELECT * FROM `e107_blogtime_friendslist` 
WHERE
               fromuserid =".$row['userid']." ";

$resfreind1 = mysql_query($friendsql);

$friendrow = mysql_fetch_array($resfreind1);

if(USERID != $row['userid']){
		if ($friendrow['freundesstatus']=2 ) {
				$freundimage='<img src="system/myfriend.png">';
		}else{
				$freundimage="<img id='".$row['userid']."'style='cursor:pointer;vertical-align:middle' src='system/friends.png' class='friends tooltip2' title='Add me as Friend'>";
                          }

  }else{$freundimage="";}
 
Zurück