DB abfrage nach array Werten

Godstyle

Erfahrenes Mitglied
Hey Leute,

ich mal wieder,

folgendes Problem, Ich möchte meine Freundesliste auf einer Siete ausgeben, dazu habe ich 2 Abfragen um alle zu ermitteln.

Dann habe ich 2 Array die ich zusammenlege zu einem:

$f_all = array_merge((array)$f_chk_user1, (array)$f_chk_user2);

Das Problem an der Sache ist nun, das ich die User ids meiner freunde habe und den namen Brauche, also nächste abfrage um die zugehörigen Usernamen zu erfahren.

Das ergebniss ist: Ich habe gar keine Freunde -.- ( gut das weiß ich selber aber laut db ist es anders. )


Also was ich bisher habe ist folgendes:
PHP:
<?php
$f_all = array_merge((array)$f_chk_user1, (array)$f_chk_user2);	


$userlist = implode($f_all,',');
	$f_chk = 'SELECT 
				*
			FROM 
				`ow_login`
			WHERE 
				`id` FIND_IN_SET('.implode(', ',array_map('intval', $f_all)).')';

$rs = $pdo->prepare($f_chk);
$count = $rs->rowCount();
echo $count . '<br />';
echo $userlist . '<br />';
while($row = $rs->fetch()) {
?>
<a onClick="document.getElementById('bet_friend').value = '<?php echo $row['id'];?>'"><?php echo $row['user'];?></a><br />
<?php }?>


echo von count sagt mir 0
echo von userliste sagt mir die richtigen ids

das ich das mit 3 abfragen lösen musst geht mir ehrlich gesagt auch gewaltig gegen den Strich aber da habe ich weniger einen Plan von, helfen würde mir schon wenn ich die user namen erhalten würde.

Das ganze script mit allen 3 sieht wie folgt aus, falls der fehler nicht in dem Oben genannten teil steckt:
PHP:
<?php
$min = 1 ;
    $chk_friend = "SELECT ".
                        "user1, user2, status ".
                  "FROM ".
                          "friends ".
                  "WHERE ".
                        "(status = '".($min)."') AND ". 
                              "(user2 = '".($_SESSION['usid'])."')";
							  
$chk_usr_1 = $pdo->query($chk_friend);
$count = $chk_usr_1->rowCount();							  
					
if ($count > 0)  
		{ 
		$f_chk_user1 = array();
		while ($row = $chk_usr_1->fetch()) {
			$f_chk_user1[] = $row['user1'];
			}
		}

    $chk_friend = "SELECT ".
                        "user1, user2, status ".
                  "FROM ".
                          "friends ".
                  "WHERE ".
                        "(status = '".($min)."') AND ". 
                              "(user1 = '".($_SESSION['usid'])."')";
$chk_usr_2 = $pdo->query($chk_friend);
$count = $chk_usr_2->rowCount();							  
					
if ($count > 0)  
		{ 
		$f_chk_user2 = array();
		while ($row = $chk_usr_2->fetch()) {
			$f_chk_user2[] = $row['user1'];
			}
		}
# hier sind die beiden abfragen aus der db in 1 array zusammengelegt		
$f_all = array_merge((array)$f_chk_user1, (array)$f_chk_user2);	


$userlist = implode($f_all,',');
	$f_chk = 'SELECT 
				*
			FROM 
				`ow_login`
			WHERE 
				`id` FIND_IN_SET('.implode(', ',array_map('intval', $f_all)).')';

$rs = $pdo->prepare($f_chk);
$count = $rs->rowCount();
echo $count . '<br />';
echo $userlist . '<br />';
while($row = $rs->fetch()) {
?>
<a onClick="document.getElementById('bet_friend').value = '<?php echo $row['id'];?>'"><?php echo $row['user'];?></a><br />
<?php }?>


lg
 
OK, ich versteh das nicht :D

Zeig mal deine Tabellenstruktur plus einige Datensätze und das, was du gerne mit der Abfrage rauskriegen willst (bei welchen Parametern).
 
Hab einiges umgebaut und nun geht es, störend sind eben doch die 3 db abfragen. Zunächst mal das neue Script:

PHP:
<?php

$min = 1 ;
    $chk_friend = 'SELECT 
                        user1, user2, status, user 
                  FROM 
                          friends 
				  INNER JOIN 
				  			ow_login 
				  ON 
				  	friends.user1 = ow_login.id 
                  WHERE 
                        fstatus = '.$min.' AND  
                              user2 = '.$_SESSION['usid'].'';
							  
$chk_usr_1 = $pdo->query($chk_friend);
$count = $chk_usr_1->rowCount();						  
					
if ($count > 0)  
		{ 
		$f_chk_user1 = array();
		while ($row = $chk_usr_1->fetch()) {
			$f_chk_user1[] = $row['user'];
			}
		}

    $chk_friend = 'SELECT 
                        user1, user2, status, user 
                  FROM 
                          friends 
				  INNER JOIN 
				  			ow_login 
				  ON 
				  	friends.user2 = ow_login.id 
                  WHERE 
                        fstatus = '.$min.' AND  
                              user1 = '.$_SESSION['usid'].'';
							  
$chk_usr_2 = $pdo->query($chk_friend);
$count = $chk_usr_2->rowCount();							  
					
if ($count > 0)  
		{ 
		$f_chk_user2 = array();
		while ($row = $chk_usr_2->fetch()) {
			$f_chk_user2[] = $row['user'];
			}
		}

# hier sind die beiden abfragen aus der db in 1 array zusammengelegt		
$f_all = array_merge((array)$f_chk_user1, (array)$f_chk_user2);	
sort($f_all); 
$userliste = implode(',', $f_all);
for ($x = 0; $x < count($f_all); ++$x) { ?>
    <a onClick="document.getElementById('bet_friend').value = '<?php echo $f_all[$x];?>'"><?php echo $f_all[$x];?></a><br />
<?php } ?>


Also was es machen soll:

Habe 1 db friends aufbau fid | user1 | user2 | fstatus // name friends
und die andere hat id | user//name ow_login

das sind die relevanten felder sind noch größer

in der ersten stehen unter user1 und user2 jeweils die user ids und der status prüft ob die beiden befreundet sind.

Beim eintragen wird immer der anfragen steller in user1 eingetragen und der angefragt in user2

daher muss ich 2 mal abfragen um in beide richtiungen zu erfahren ob die leute befreundet sind.


Habe meine abfragen nun mit join erweitert, so erhalte ich die user namen und nicht mehr die ids, wodurch ich dir 3te abfrage gesparrt habe.


Aber kann ich nicht in einer einzigen abfrage beide richtungen abfragen?
 
das bekomme ich nicht hin da ich einmal frage:

user1 = '.$_SESSION['usid'].''; und dann
user2 = '.$_SESSION['usid'].'';

dadurch erhalte ich dann auch meine eigene id mehrfach als ergebniss.

oder baue ich das völlig falsch zusammen denn alle versuche bisher führten zu fehlern oder doppelten dergebnissen die ich dann ausfiltern müsste
 
Zurück