0

我有以下数据库: 数据库图

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;

用户表:

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

联系人表:

用户 ID、联系人状态、联系人 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。

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

4

2 回答 2

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
于 2012-12-23T15:20:17.677 回答
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
于 2012-12-23T15:27:38.270 回答