2015-05-12 81 views
0

我有2个表,一个用户的表和一个朋友表。对于当前用户的朋友和非朋友的用户的MySql查询

users 
__________ 
user_id p.k 
username 

friends 
__________ 
from_user 
to_user 
status ENUM('1', '2') //1 for sent/pending, 2 for accepted 
primary key('from_user', 'to_user') // both also reference user_id 

我是比较新的MySQL和一直在试图创建,将搜索基于用户名和用户名返回,USER_ID行通配符%%搜索查询,而人是地位这两个朋友和非朋友都以当时用户的顺序限制为10人。我将不胜感激任何关于此事的帮助和指导。以下是我到目前为止。

SELECT Users.user_id, Users.username, Friends.status 
FROM Users 
LEFT JOIN 
Friends ON 
    Users.user_id IN Friends.to_user, Friends.from_user AND 
    'id of user' IN Friends.to_user, Friends.from_user 
WHERE 
+0

什么疑问有你试过了吗?请将它们添加到问题中,并详细说明这些查询具有的问题。 – Cristik

+0

@Cristik我还没有得到一个完整的查询工作,我是一个新手,所以我不知道如何完全执行这样的查询 –

+0

没关系,发布你有什么,并告诉我们你在哪里被阻止。 – Cristik

回答

0

试试这个,让朋友链接:

select uf.user_id, uf.username, f.status 
from users u 
join friends f on u.user_id = f.from_user 
join users uf on f.to_user = uf.user_id 
where u.username like '%teddy%' and f.status = 2 
LIMIT 10; 

,这让所有的可能的联系,朋友,发送/待定,而不是朋友:

select uf.user_id, uf.username, f.status 
    from users u 
    left join friends f on u.user_id = f.from_user 
    left join users uf on f.to_user = uf.user_id 
    where u.username like '%teddy%' 
    LIMIT 10; 
+0

我试过了,并将短语更改为我已保存的用户名,但我没有收到任何回复 –

+0

您有2张表中的数据吗?因为在查询中,你粘贴的问题使用左连接....如果我不是你的朋友是你的数据我有一个表上的朋友状态'不是朋友'的记录? – bugs2919

+0

你的第二个查询效果很好,但是有什么方法可以修改它,所以它只返回3个字段:user_id,用户名和与当前用户相关的人的状态,而不返回查询中的当前用户? –