發現簽入我有一個PostgreSQL下表:SQL查詢從朋友
Categories | Locations | Checkins | Users | Friendships
id | id | id | id | user_id
name | category_id | location_id | gender | friend_id
icon | name | user_id | |
現在,我想檢索有關場地的下列信息
- 多少女性和男性用戶一個位置都有
- 類別名稱和圖標
- 地點名稱
- 有幾個朋友CHEC ked在一個位置(從給定的用戶ID)
除了最後一點,我解決了它。但我有麻煩來計算來自給定用戶ID的朋友。我試着用這個查詢:
SELECT distinct locations.id,
max(locations.name) as name,
max(locations.location) as location,
max(categories.name) as cat,
max(categories.icon) as caticon,
SUM(CASE WHEN users.gender = 'm' THEN 1 ELSE 0 END) AS male,
SUM(CASE WHEN users.gender = 'f' THEN 1 ELSE 0 END) AS female,
SUM(CASE WHEN friendships.user_id = 1 OR friendships.friend_id=1 THEN 1 ELSE 0 END) AS friends
FROM locations
INNER JOIN checkins ON checkins.location_id = locations.id
INNER JOIN users ON users.id = checkins.user_id
INNER JOIN categories ON categories.id = locations.category_id
LEFT JOIN friendships ON friendships.user_id = users.id OR friendships.friend_id = users.id
WHERE locations.id=7
GROUP BY locations.id
但我得到一個錯誤的女性用戶數。任何想法我做錯了什麼?我想我需要一個友誼表的左連接,因爲如果用戶沒有朋友(或沒有用戶給出),它應該只返回0爲好友數。
希望我自己清楚, THX,禮服
'從地點',我相信它應該是。此外,'WHITE friendships.user_id = 1 OR friendships.user_id = 1'應該可以是'WHITE friendships.user_id = 1 OR friendships.friend_id = 1'。我有一個問題:如果兩個用戶是彼此的朋友,那麼在'友誼'中會有多少記錄,1或2?並且2條記錄應該產生1或2個友誼? – 2011-05-22 10:28:37
thx爲您的答案(我固定它,它是早上toooo;))。當兩個用戶是彼此的朋友時,友誼表中只有一條記錄,請求友誼的用戶存儲在'user_id'中,另一個用於'friend_id' – 23tux 2011-05-22 10:31:01