1

我有这个 MySQL 表:

在此处输入图像描述

假设我以用户 1 的身份登录,并且正在浏览用户 2 的个人资料。因为我们是共同的朋友(1 是 2 的朋友,2 是 1 的朋友),所以我需要回显“朋友”。

当我浏览用户 4 的个人资料时,我已经请求了他的好友,但他们还没有接受,我需要回显“好友请求”。

浏览任何其他用户时,我需要回显“添加朋友”。

我可以做 PHP 部分,我只是不知道如何做 MySQL 查询。

4

3 回答 3

2
SELECT COUNT(*) as `count`, `user` 
FROM `friends`
WHERE 
    (`user` = 1 AND `friend` = 16) OR 
    (`user` = 16 AND `friend` = 1)

count什么时候

  • 2 = 相互的(你和那个人是朋友)
  • 1user是你——你要求那个人的友谊
  • 1 并且user是那个人 - 那个人要求你建立友谊
  • 0 = 你和那个人之间没有联系
于 2013-01-20T01:47:08.193 回答
0

你期待这样的事情吗?(仅用于 sql 部分,而不是 PHP :))

SQLFIDDLE 演示

SELECT DISTINCT a. user, 
                CASE 
                  WHEN a.user = b.friend 
                       AND a.friend = b.user THEN b.friend 
                  ELSE '' 
                end friends, 
                CASE 
                  WHEN a.user = b.friend 
                       AND a.friend <> b.user THEN a.friend 
                  ELSE '' 
                end friendreq, 
                CASE 
                  WHEN a.user <> b.friend 
                       AND a.friend <> b.user THEN a.friend 
                  ELSE '' 
                end addfriend 
FROM   demo a 
       LEFT JOIN demo b 
              ON a.id > b.id; 
| 用户 | 朋友 | 好友请求 | 添加好友 |
------------------------------------------
| 1 | | | |
| 2 | 2 | | |
| 1 | | | 16 |
| 1 | | 16 | |
| 16 | | | |
| 16 | | | 1 |
| 16 | 16 | | |
| 1 | | | 4 |
| 1 | | 4 | |
于 2013-01-20T00:23:35.753 回答
0
select (case 
    when subquery.a > 0 and subquery.b > 0 then 'friends'
    when subquery.a > 0 then 'friend requested'
    else 'add friend' end) as "friend_string"
from (
    select
        (select count(*) from relationships where user = '$my_user_id' and friend = '$opponent_user_id') as a,
        (select count(*) from relationships where user = '$opponent_user_id' and friend = '$my_user_id') as b
) subquery

relationships用您的表名替换,并用您的 $ 变量替换。

于 2013-01-20T00:10:26.090 回答