0

我正在用 PHP 和 MySQL 创建一个伙伴系统,但我有点困惑。我有一张名为“buddies”的表,有三列;用户 1,用户 2,待处理。用户 1 将是两个好友之一,用户 2 将是另一个好友。“待定”将是“真”或“假”。

然后我需要在网页上显示用户。如何选择唯一不是他们自己的用户的列(user1 或 user2)。我目前的代码是

$sql="SELECT * FROM buddies WHERE user1='$username' OR user2='$username' AND pending='1'";

$query = mysql_query($sql);

显然,它还会显示用户自己的用户以及好友。我怎样才能解决这个问题?

4

3 回答 3

3

您可以使用联合:

SELECT user1 from buddies WHERE user2 = '$username' UNION SELECT user2 FROM buddies WHERE user1 = '$username'

这将从他们自己的用户在 user2 中的所有记录中选择 user1,反之亦然并连接列表。

(注意:您可能需要仔细检查确切的语法,我已经有一段时间没有使用 UNION 关键字了。)

于 2012-05-16T23:35:37.847 回答
0

当你在 PHP 中循环遍历你的结果(显示好友)时,只显示不等于 $username 的那个。

于 2012-05-16T23:39:14.903 回答
0

像这样使用 MySQL 的 'if' 函数怎么样:

SELECT IF(user1 = '$username', user2, user1) AS buddy
FROM buddies
WHERE user1 = '$username' OR user2 = '$username'

然后,如果您想获取这些伙伴的其他用户数据(大概,您有​​一个包含更多详细信息的 users 表),您可以像这样获取它:

SELECT u.*
FROM (
    SELECT IF(user1 = '$username', user2, user1) AS buddy
    FROM buddies
    WHERE user1 = '$username' OR user2 = '$username'
) AS b
LEFT JOIN users AS u
    ON b.buddy = u.username
于 2012-05-17T00:22:57.840 回答