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 =相互(あなたはその人と友達です)
  • 1そしてuserあなたは-あなたはその人の友情を要求しました
  • 1そしてuserその人です-あなたはその人から友情を求められています
  • 0=あなたとその人の間に関係はありません
于 2013-01-20T01:47:08.193 に答える
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 に答える
0

あなたはこのようなものを期待していますか?(PHPではなくSQL部分のみ:))

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; 
| ユーザー| フレンズ| FRIENDREQ | ADDFRIEND |
------------------------------------------
| 1 | | | |
| 2 | 2 | | |
| 1 | | | 16 |
| 1 | | 16 | |
| 16 | | | |
| 16 | | | 1 |
| 16 | 16 | | |
| 1 | | | 4 |
| 1 | | 4 | |
于 2013-01-20T00:23:35.753 に答える