选择用户的所有联系人(朋友)

时间:2012-12-23 12:11:09

标签: mysql database select contacts

我有以下数据库: Database Diagram

来自Contacts表的

user_id和contact_id是PK和FK到Users表中的user_id字段。如何选择特定用户的所有联系人(或朋友),包括该用户的所有联系人的联系人数量。我尝试了不同的SELECT查询但是联系人数量不正确或者contact_status打印错误。我使用COUNT()作为函数来打印联系人的数量。我使用此查询但是contact_status打印错误:

SELECT COUNT(Contacts.contact_id), Users.user_id, Users.user_name, Users.name,     Users.user_picture, Users.mood_message, Users.phone_number, Users.email, Users.country,   Users.city, Users.website, Users.birth_date, Users.gender, Users.language, Users.about_me, Users.online_status, Users.privacy, Contacts.contact_status 
FROM Contacts JOIN Users ON Contacts.contact_id = Users.user_id 
WHERE Users.user_name IN ( 
      SELECT Users.user_name 
      FROM Users 
      WHERE Users.user_id IN ( 
            SELECT Contacts.contact_id 
            FROM Contacts 
            WHERE Contacts.user_id = 12 
)
)
GROUP BY Users.user_name;

用户表:

user_id,user_name,...
12约翰......
13马特...
14杰克......

联系人表:

user_id,contact_status,contact_id
12 1 13
13 1 12
12 2 14

如果我想要打印John的所有联系人,结果应该包括:

COUNT(Contacts.contacts_id),Users.user_name,Users。 ...,Contacts.contact_status
            1马特... 1
            0杰克...... 2

以上查询将1,1打印为contact_status而不是1,2。

你可以帮我解决这个问题吗?提前谢谢。

2 个答案:

答案 0 :(得分:0)

如果我理解你的目标是什么,这应该有效:

SELECT c.contact_status, cc.contactCount, u.*
FROM Contacts c JOIN Users u ON (c.contact_id = u.user_id)
JOIN (
    SELECT user_id, COUNT(1) contactCount FROM Contacts
    GROUP BY user_id
) cc ON (c.user_id = cc.user_id)
WHERE c.user_id = 12

答案 1 :(得分:0)

我希望我理解你的要求,但使用子查询要简单得多,如下:

SELECT 
    u.* -- Whatever fields you need
    ,(
           select count(*) from Contacts c
           where c.contactid = co.userid -- refers to outer record
     ) as contact_count
FROM
Users u Inner Join Contacts co
      on co.UserId = u.UserId
WHERE
      U.UserId = 12