我的网站上有2个表格,users
表格和user_friendships
表格,每个表格都是这样的...
用户
id | user_id | credits_bank | credits_offered
用户友谊
id | user_id | user_followed_id
当我的用户登录时,他会在网站上看到其他用户的列表 - 其他用户的列表是那些存储在users
表中且在{{1}中具有更大价值的用户表比credits_bank
表的表。
创建友谊时,会话用户credits_offered
存储在id
表中,他所关注的其他成员的ID也存储在user_friendships
表下专栏user_friendships
。
问题是我现在需要一个查询来返回移动user_followed_id
而不是credits_bank
的所有用户以及与credits_offered
表中不在同一记录中的用户会话用户。
我目前正在使用......
user_frienships
更新
我想查看SELECT DISTINCT u.*
FROM users u
LEFT JOIN user_friendships uf ON u.user_id = uf.user_followed_id
WHERE u.user_id <> ?
AND u.credits_offered <= credits_bank
AND uf.user_followed_id IS NULL
的值大于credits_bank
的用户列表,我只想在我credits_offered
表的记录中不存在它们时显示它们与我的会话用户在同一行。
用户
user_friendships
用户友谊
id | user_id | credits_bank | credits_offered
___________________________________________________
1 123 10 2
2 231 6 3
3 312 6 5
4 213 2 1
结果
如果会话user_id = 123则...
id | user_id | user_followed_id
___________________________________________________
1 123 231
2 123 312
如果会话user_id为312,那么他会看到所有结果,因为他与user_friendships表中的任何人不是朋友......
答案 0 :(得分:1)
试试这个:
SELECT u.id, u.user_id, u.credits_bank, u.credits_offered
FROM users u
WHERE u.credits_bank>u.credits_offered
AND u.user_id = [ENTER LOGGED IN USERS ID HERE]
AND u.user_id NOT IN (
SELECT f.user_ol
FROM user_friendships f
)
如果您有任何问题,请告诉我
修改强> 最新的SQL:
SELECT u.id, u.user_id, u.credits_bank, u.credits_offered
FROM users u
INNER JOIN user_friendships f
ON f.user_followed_id = u.user_id
AND u.credits_bank > u.credits_offered
AND f.user_id != [CURRENT_USER_ID]
AND u.user_id != [CURRENT_USER_ID]
答案 1 :(得分:1)
据我所知,你很亲密。如果当前用户的用户ID被称为SESS_USER_ID,那么这样的东西应该适合你;
SELECT DISTINCT u.*
FROM users u
LEFT JOIN user_friendships uf
ON uf.user_followed_id = u.user_id
AND uf.user_id = SESS_USER_ID
WHERE u.credits_offered <= credits_bank
AND uf.user_followed_id IS NULL
AND u.user_id <> SESS_USER_ID
(请注意,SESS_USER_ID在查询中使用了两次以使其变得简单)