2012-08-06 34 views
0
<?php 
    mysql_connect("localhost","root",""); 
    mysql_select_db('db2012'); 
    $uid = 8; 
    $mid = 10; 

    $q = mysql_query("select friend from users_friends where user = $uid") or die(mysql_error()); 
    if(mysql_num_rows($q) > 0) 
    { 

     while($r=mysql_fetch_array($q)) 
     { 
      $qq = mysql_query("select friend from users_friends where user = $mid") or die(mysql_error()); 
      while($rr = mysql_fetch_array($qq)) 
      { 
       if($r[friend]==$rr[friend]) 
       { 
        $friend_name_query = mysql_query("select name from users where uid = '$rr[friend]'") or die(); 
        $friend_name = mysql_fetch_array($friend_name_query); 
        echo $friend_name[name]; 
       } 
      } 
     } 
    } 


?> 

這個查詢正在工作,但任何其他出路使用較少的查詢? IMA初學編程的,請讓我知道如果有NE THNG ...此查詢選擇MUTUAL FRIEND是否正確?

+1

第3行你有一個單引號和一個雙引號只是一個快速觀察。 – Simon 2012-08-06 08:39:08

+0

如果您在循環中運行數據庫查詢,很可能是錯誤的方式。您應該瞭解[SQL'JOIN's](http://www.tizag.com/sqlTutorial/sqljoin.php)。我修正了@Simon提到的引用問題,因爲我猜這是一個複製/粘貼錯誤,否則你會抱怨解析錯誤。 – DaveRandom 2012-08-06 08:41:14

+0

@Simon - 認爲這只是問題中的一個錯字,OP說他的代碼正在工作,但問是否有更高效的方式來實現相同的結果。 – martincarlin87 2012-08-06 08:41:46

回答

0

你應該只使用一個查詢:

$query = 'SELECT u.name 
    FROM users_friends f1 
     INNER JOIN users_friends f2 ON (f2.friend = f1.friend) 
     INNER JOIN user u ON (u.uid = f2.friend) 
    WHERE f1.user = "'. $uid. '" 
     AND f2.user = "'. $mid .'"'; 

運行查詢

$q = mysql_query($query) or die(mysql_error()); 

,做while循環

while($r=mysql_fetch_array($q)){ 
    echo $r['name']; 
} 

您只需要if(mysql_num_rows($q) > 0)聲明如果您執行else,否則,你可以只使用while

+0

Thanx的幫助...它的工作 – 2012-08-06 13:21:13

+0

@Gulzar好,你能請投票答案,並設置答案作爲接受的答案? – arnoudhgz 2012-08-06 13:24:29

+1

做老闆................. – 2012-08-06 13:27:23

0

你可以嘗試以下,以獲得用戶8共同的朋友,然後10

select * from 
user_friends a inner join user_friends b on 
a.friend=b.friend and (a.user='8' and b.user='10') 

ü可以加入用戶表得到的名稱。

+0

thnxx fr建議 – 2012-08-06 13:21:36