【问题标题】:MYSQL syntax conditional COUNTMYSQL 语法条件 COUNT
【发布时间】:2012-08-12 05:33:27
【问题描述】:

我有一个复杂的连接查询工作。但是,除了从不同的表中拉取字段之外,我还想统计满足某些条件的记录数。

例如,其中一张表是关注者,我想计算一个给定的人被关注(由他们的用户 ID 标识)有多少关注者。此数字与整个查询中的记录数不同,后者是关于具有不同用户 ID 的关注者的。

我认为有一些方法可以使用 COUNT 命令执行此操作,但我对语法一无所知。

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

表follow_table:ID,follower_id,followed_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
}

【问题讨论】:

  • 那么,你想要你关注的人的关注者数量?
  • 是的。总共有多少人,而不仅仅是你,在关注那个人。

标签: mysql syntax count


【解决方案1】:
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 ;

【讨论】:

  • 工作。伟大的。我不认为有一种方法可以有条件地计算另一个表中的行数,比如照片,就像人们关注的照片上传了多少一样,比如 COUNT(p.*) WHERE p.userid = f1.followed_id
  • 可能有,但在一个查询中对不同的表执行两种不同的计数可能会很复杂。我建议你发布另一个问题。
【解决方案2】:
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

如果我理解你的话,这应该有助于在一个查询中完成所有操作。

【讨论】:

  • 还没有工作。第二个是 f2.followed_id=ft.followed_id 吗?另外,为了打印出来,我在第二个子句中修改为 SELECT COUNT(*) as `countfollow',然后尝试回显 $row['countfollow'] 但没有得到结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-18
  • 2016-10-27
  • 2018-03-15
  • 1970-01-01
  • 2016-02-11
  • 2011-06-01
  • 2014-03-13
相关资源
最近更新 更多