2013-05-25 24 views
-2

我的代碼看起來是這樣的,現在只有取人誰不是你的朋友

<?php 
    $get_userinfo = mysql_query("SELECT * FROM users WHERE id != '$id'") or die(mysql_error()); 
    for ($i = 1; $i <= 6; $i++) { 
      $userinfo = mysql_fetch_assoc($get_userinfo); 
      $usertags = $userinfo['tags']; 
      $tagsdata = explode(" ", $usertags); 
      $interestsdata = explode(" ", $interests); 
      $result = array_intersect($interestsdata, $tagsdata); 

      echo '<li><img src="images/users/'.$userinfo['avatar'].'" /><a href="'.$userinfo['username'].'">'.$userinfo['name'].'</a><div class="add whotofollow'.$i.'" title="Not following/friends"></div></li>'; 
      } 
?> 

所以這目前選擇誰不都是你自己的所有用戶,然後在人匹配他們對你的利益,所以只有你真正想要的人顯示更新。然後它使得所有這些人中只有6人變得可見,並且不會像最常見的東西在最先這樣的東西那樣檢查。

有幾件事情我自己不知道如何從這些代碼。

我首先要確保只有人民的朋友們表示我還沒有添加。朋友存儲在名爲「friends」的表中,其中包含行「userid」和「userid2」。如果我們是朋友,userid或userid2可以是我的ID。

其次我需要向他們訂購所以我有共同的大多數與排名第一,還這麼顯示的前6人大多數與我共同的,而不是6個隨機的。

所以基本上,我怎麼先檢查,所以我沒有加入他們爲朋友? (表格:朋友,行:userid和userid2,任何一個id都可以是我的id) 如何選擇與我最常見的前6位的人?

+0

他已經這樣做了:_Friends存儲在一個名爲「friends」的表中,其中包含行「userid」和「userid2」._ – kelunik

回答

8

只選擇誰是沒有朋友的人:

SELECT * FROM users WHERE NOT EXISTS 
    (SELECT * 
    FROM friends 
    WHERE userid = users.id 
      OR userid2 = users.id) 

匹配的標籤和他們相比,我寧願第三個表。

編輯:像

SELECT * FROM users 
    WHERE NOT EXISTS 
     (SELECT * FROM friends WHERE userid = users.id OR userid2 = users.id) 
    ORDER BY (SELECT COUNT(*) FROM tags AS t1 LEFT OUTER JOIN tags AS t2 ON t1.tagname = t2.tagname 
     WHERE t1.id = users.id) 
    LIMIT 6 
+0

哦,是的,我忘了'EXISTS'語句,我多麼愚蠢:( –

+0

謝謝!這有幫助,但我不想把它作爲答案,因爲我仍然不知道如何取得前6名。 – TheMeisterSE

+0

試試我編輯的內容 – kelunik

0

它看起來就像你有兩個表:usersfriends。你想,以配合您friends符合userid(我假定這是friendsuserid2),並顯示在表users的用戶信息。

select語句下面將其中的用戶表中的userid在朋友表匹配useriduserid2字段等於你username從用戶表中返回行。該limit聲明中,只顯示第6場比賽

SELECT * FROM users 
JOIN friends ON users.userid == friends.userid WHERE friends.userid2 == '$id' 
LIMIT 6 

這不應對的朋友最匹配的排序。我會把它留給別人。

相關問題