【问题标题】:SELECT all contacts (friends) of a user选择用户的所有联系人(朋友)
【发布时间】:2012-12-23 12:11:09
【问题描述】:

我有以下数据库:

Contacts 表中的user_id 和contact_id 是Users 表中user_id 字段的PK 和FK。如何选择特定用户的所有联系人(或朋友),包括该用户所有联系人的联系人数量。我尝试了不同的 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;

用户表:

用户 ID、用户名、...
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,用户。 ... , Contacts.contact_status
1 马特 ... 1
0 杰克... 2

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

你能帮我解决这个问题吗?提前致谢。

【问题讨论】:

  • 为了让你的问题更清楚,最好的做法是在其中包含具有所需结果的示例记录:D

标签: mysql database select contacts


【解决方案1】:

如果我了解您的目标,这应该可行:

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

【讨论】:

    【解决方案2】:

    我希望我了解您的要求,但使用子查询要简单得多,如下所示:

    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
    

    【讨论】:

    • 实际上我想选择 ID = 12 的用户的所有联系人,包括 ID = 12 的用户的每个联系人的联系人数量。就像在 Skype 中,当您从联系人中打开某人的个人资料时列出你可以看到他有多少联系人。
    猜你喜欢
    • 2011-12-06
    • 2012-05-20
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    • 2014-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多