2012-08-11 59 views
2

我有一个复杂的联合查询工作。但是,除了从不同表格中提取字段之外,我还要计算满足特定条件的记录数量。有条件的MYSQL语法COUNT

例如,其中一个表是追随者,我想要统计一个给定的人被追踪了多少追随者 - 通过他们的用户标识符来确定。这个数字与整个查询中记录的数量不同,后者是关于具有不同用户标识的追随者。

我想有一种方法可以用COUNT命令来做到这一点,但我对语法一无所知。

以下可能会对查询中的查询做到这一点,但它很混乱,我正在寻找一种更简单的方法来做到这一点。感谢您的任何建议。

follow_tableIDfollower_idfollowed_id

$res1 = mysql_query("SELECT * FROM follow_table WHERE follower_id= '$userid'"); 

//have list of all users this user is following 
while($row1 = mysql_fetch_array($res1)) 
{ 
    $followed_id = $row1['followed_id']; 
    $res2 = mysql_query("SELECT * FROM follow_table WHERE followed_id = '$followed_id'"); 
    echo mysql_num_rows($res2); // Echo the number of followers 
} 
+0

因此,你想要追随者的数量? – 2012-08-11 21:03:15

+0

是的。总共有多少人,不仅仅是你,正在关注那个人。 – user1260310 2012-08-11 21:07:16

回答

3
SELECT 
    f1.followed_id      --- all the people that $user follows 
    , COUNT(*)  AS followers  --- and the number of their followers 
FROM 
    follow_table AS f1 
    JOIN 
    follow_table AS f2 
     ON f2.followed_id = f1.followed_id 
WHERE 
    f2.follower_id = $userid   --- the specific $user 
GROUP BY 
    f1.followed_id ; 
+0

工作。大。我不认为有一种方法可以在另一个表中有条件地计数行,例如照片,就像人们跟随上传的照片数量一样,如COUNT(页*)那样p.userid = f1.followed_id – user1260310 2012-08-11 22:58:27

+0

可能有但在一个查询中对不同表格执行两次不同的计数可能会很复杂。我建议你发表另一个问题。 – 2012-08-11 23:01:40

1
SELECT COUNT(*) FROM follow_table ft WHERE ft.follower_id= '$userid' AND (
SELECT COUNT(*) 
FROM follow_table ft2 
WHERE ft2.follower_id = ft.follower_id) > 0 

如果我理解你,这应该有助于使所有在一个查询。

+0

还没有工作。会第二在哪里f2.followed_id = ft.followed_id?另外,为了打印出我在第二节中修改SELECT COUNT(*)为'countfollow',然后尝试echo $ row ['countfollow']但没有得到结果。 – user1260310 2012-08-11 21:01:04