2014-11-25 25 views
0

我有三個表如下。我想獲得最高級別的用戶。mysql使用內部連接獲取用戶等級

1)用戶表作爲

id  | user_id | created_at 
1   | 100  | 2014-11-07 02:54:09 
2   | 102  | 2014-11-08 03:52:40 
3   | 103  | 2014-11-10 02:47:26 
4   | 104  | 2014-11-11 02:54:48 
5   | 105  | 2014-11-14 03:11:23 
6   | 105  | 2014-11-15 00:56:34 

2)user_profile表作爲

id  | user_id | rank 
1   | 100  | 100 
2   | 102  | 500 
3   | 103  | 10 
4   | 104  | 0 
5   | 105  | 11 
6   | 105  | 1000 

3)user_followers表作爲

id  | user_id | followers 
1   | 100  | 10 
2   | 102  | 20 
3   | 103  | 30 
4   | 104  | 40 
5   | 105  | 0 
6   | 105  | 50 

現在我的查詢是我想要得到的名單表2中用戶排名最高。如果在桌面3中擁有最高關注者的領帶用戶將獲勝。如果同一個追隨者首先創建的用戶會贏。

而另一個我想找到用戶級別相同的邏輯傳遞用戶ID。

我已經嘗試過類似

SET @i=0; 
SELECT user_id, rank, @i:[email protected]+1 AS rank FROM user_profile ORDER BY rank DESC 
+1

那麼,你到目前爲止嘗試過什麼?向我們展示你的SQL。 – jurgemaister 2014-11-25 07:58:10

+0

我編輯了我已經嘗試過的內容,但沒有獲得內連接。需要幫忙。 – Hardik 2014-11-25 08:00:25

+0

我不知道爲什麼@ Arion的答案被刪除了。它幾乎在那裏 – Strawberry 2014-11-25 08:55:42

回答

0
SET @rank = 0; 
SELECT 
@rank := @rank + 1 AS rank, * 
FROM 
(
SELECT users.user_id, user_profile.rank, user_followers.followers, users.created_at 
FROM users 
LEFT JOIN user_profile ON users.user_id = user_profile.user_id 
LEFT JOIN user_followers ON users.user_id = user_followers.user_id 
ORDER BY user_profile.rank DESC, user_followers.followers DESC, users.created_at ASC 
) 
+0

你錯過了整個「如果配合」部分的問題。 – fancyPants 2014-11-25 08:19:32

+0

這將返回用戶列表。但是我想給排名最高的用戶或追隨者排名第一的排名 – Hardik 2014-11-25 08:44:49

+0

Hardik,添加了排名。 – Eddy 2014-11-25 10:03:13

0

阿里昂的回答這個樣子......

SELECT 
users.* 
FROM 
users 
JOIN user_profile 
    ON users.user_id = user_profile.user_id 
JOIN user_followers 
    ON user_profile.user_id=user_followers.user_id 
ORDER BY 
user_profile.rank DESC, 
user_followers.followers DESC, 
users.created_at DESC 

...但是這似乎有點接近你以後。 ...

​​3210
+0

是的,這更接近我的查詢。你能幫我找到具體的用戶級別嗎?就好像我的排名是100(最高),追隨者100(最高)比我的排名第一。 – Hardik 2014-11-25 09:20:20

+0

否。因爲一個用戶可以有多個配置文件。 – Strawberry 2014-11-25 09:58:21