2010-10-24 20 views
1

我想列出一個列表來顯示用戶的在線朋友。PHP:一次選擇和過濾兩個表格

users 
id | firstname | lastname | last_access 

users_friends 
uID | bID | type | accepted 

這是我tabels什麼樣子。

首先,我在$ USER中擁有用戶的ID。

$ USER的id存儲在users_friends的「uID」列的一行中。 bID是朋友的ID。

我還需要檢查接受,如果它是1,否則用戶「等待」,並已被朋友接受。

類型也應該檢查「朋友」,因爲我也有其他類型的。

檢查它們是否在線:包含unix時間戳的last_access。

自上次訪問以來500秒,這是我在社區中稱爲「在線」的。

現在,您只需要知道這一點。我試圖建立自己的查詢,並與該出來了:

$query = mysql_query(" 
     SELECT * 
     FROM users u, users_friends uf 
     WHERE 
      u.last_access > UNIX_TIMESTAMP()-500 
      AND 
       uf.uID = '$USER' 
      AND 
      uf.type = 'friend' 
       AND 
       uf.accepted = '1' 
"); 

現在我想呼應的網上朋友的名字和姓氏(從用戶)。

我試着做了,而()

while($get = mysql_fetch_array($query)){ 
echo $get["bID"]."<br>"; 
    echo $get["firstname"]."<br>"; 
} 

我讓我自己user's名($ USER)顯示。但echo bid是我朋友的正確身份證,儘管它顯示了所有(不過濾掉那些在線的人)。

我該怎麼做,我錯過了什麼?

回答

0

$query = mysql_query(" 
    SELECT u.* FROM 
     users AS u 
    INNER JOIN 
     users_friends AS f 
    ON u.id = f.uID 
    WHERE 
     u.last_access > UNIX_TIMESTAMP()-500 
     AND 
      f.bID = '$USER' 
     AND 
      f.type = 'friend' 
     AND 
      f.accepted = '1' 
"); 

這應該給你你的朋友行。儘管如此,請注意使用$ USER變量的SQL注入。

注意:這會給你一個你朋友的列表(你在他們的朋友列表中)。如果「友誼」不是雙向的,並且只想看到朋友列表中的朋友,則可以用f.bID交換f.uID,反之亦然。

1

我認爲你缺少指定用戶和users_friends表

$query = mysql_query(" 
    SELECT * 
    FROM users u 
    INNER JOIN users_friends uf on u.id=uf.bid 
    WHERE 
     u.last_access > UNIX_TIMESTAMP()-500 
     AND 
      uf.uID = '$USER' 
     AND 
     uf.type = 'friend' 
      AND 
      uf.accepted = '1' 
"); 
0
SELECT DISTINCT * 
FROM users_friends uf 
LEFT JOIN users u ON uf.bID = u.ID 
WHERE uf.uID = $USER 
AND u.last_access > UNIX_TIMESTAMP()-500 
AND uf.type = 'friend' 
AND uf.accepted = '1' 
之間的關係