Php mysql返回每个用户id的行总数

Php mysql返回每个用户id的行总数,php,mysql,sql,aggregate-functions,Php,Mysql,Sql,Aggregate Functions,这是我目前掌握的代码。我正在尝试检索每个用户阅读的图书数量 并回应结果。回显用户id和他/她阅读的书籍数量 books表如下所示:id-name-pages-readby 行readby包含用户id。有什么想法/建议吗?我正在考虑使用count(),但我不知道该怎么做。您可以这样使用count(): $sql = "SELECT * FROM books LEFT JOIN users ON books.readby=users.user_id WHERE users.

这是我目前掌握的代码。我正在尝试检索每个用户阅读的图书数量 并回应结果。回显用户id和他/她阅读的书籍数量 books表如下所示:id-name-pages-readby 行readby包含用户id。有什么想法/建议吗?我正在考虑使用count(),但我不知道该怎么做。

您可以这样使用
count()

  $sql = "SELECT * FROM books LEFT JOIN users
           ON books.readby=users.user_id WHERE users.email IS NOT NULL";
  $result = mysql_query($sql);
  while($row = mysql_fetch_array($result))
     {
echo $row['readby']. " - read 10 books";
 } //while ends

希望这有帮助!:)

您可以这样使用
count()

  $sql = "SELECT * FROM books LEFT JOIN users
           ON books.readby=users.user_id WHERE users.email IS NOT NULL";
  $result = mysql_query($sql);
  while($row = mysql_fetch_array($result))
     {
echo $row['readby']. " - read 10 books";
 } //while ends


希望这有帮助!:)

子查询可以返回每个用户阅读的图书数量。它与主表左键联接,以检索关于每个用户的其他列

编辑删除了
分组依据

<?php
    $count = mysql_fetch_array(mysql_query("SELECT COUNT(`user_id`) FROM books LEFT JOIN users ON books.readby=users.user_id WHERE users.email IS NOT NULL GROUP BY `user_id`"));
    $count = $count[0];
?>
然后,在PHP中,您可以在获取结果后检索
$row['numread']

SELECT 
  users.*,
  usersread.numread
FROM 
  users
  /* join all user details against count of books read */
  LEFT JOIN  (
    /* Retrieve user_id (via readby) and count from the books table */
    SELECT 
      readby,
      COUNT(*) AS numread
    FROM  books
    GROUP BY readby
  ) usersread ON users.user_id = usersread.readby

子查询可以返回每个用户阅读的书籍数量。它与主表左键联接,以检索关于每个用户的其他列

编辑删除了
分组依据

<?php
    $count = mysql_fetch_array(mysql_query("SELECT COUNT(`user_id`) FROM books LEFT JOIN users ON books.readby=users.user_id WHERE users.email IS NOT NULL GROUP BY `user_id`"));
    $count = $count[0];
?>
然后,在PHP中,您可以在获取结果后检索
$row['numread']

SELECT 
  users.*,
  usersread.numread
FROM 
  users
  /* join all user details against count of books read */
  LEFT JOIN  (
    /* Retrieve user_id (via readby) and count from the books table */
    SELECT 
      readby,
      COUNT(*) AS numread
    FROM  books
    GROUP BY readby
  ) usersread ON users.user_id = usersread.readby


你能用
DESC用户的转储更新你的答案吗?你是什么意思$count=$count[0];这是干什么用的?是否将变量计数放置在数组的第一项上?why@fogsy我会回答,因为这个评论不是直接在相关的答案下面
mysql\u fetch\u array()
返回数字键和关联键
$row[0]
在该上下文中将返回第一列,即
COUNT(user\u id)
。您能用
DESC users
转储更新您的答案吗?您的意思是什么$count=$count[0];这是干什么用的?是否将变量计数放置在数组的第一项上?why@fogsy我会回答,因为这个评论不是直接在相关的答案下面
mysql\u fetch\u array()
返回数字键和关联键
$row[0]
在该上下文中,将返回第一列,即
COUNT(user\u id)
。我认为OP希望找到每个用户读了多少本书。这只是或多或少地说“有多少本书被用户阅读”。这怎么可能有4票?它没有像OP所要求的那样做。此查询返回一行,其中包含所有用户阅读的书籍总数,即
书籍
中的总行数。除此之外,PHP代码不会对查询执行任何错误检查。我认为OP希望找到每个用户读过多少本书。这只是或多或少地说“有多少本书被用户阅读”。这怎么可能有4票?它没有像OP所要求的那样做。此查询返回一行,其中包含所有用户阅读的书籍总数,即
书籍
中的总行数。最重要的是,PHP代码不会对查询执行任何错误检查。@JaredFarrish MySQL对
GROUP BY
的内容非常宽容,因此在这种情况下,子查询连接可能根本不需要。你的意思是,如果在字段列表中运行子查询,它仍然可以工作吗?太棒了,Michael,我正在测试。感谢you@JaredFarrish不,我的意思是,如果用户直接离开已加入的书籍并将
COUNT(readby)
包含在字段列表中,而不必
groupby
字段列表中的所有其他列,只需
groupby user\u id
@fogsy
usersread
是子查询的表别名,我知道没有该名称的实际表。我这样做的方式是将所有用户的详细信息和阅读的书籍数量一起拉出来。@JaredFarrish MySQL对
GROUP BY
的内容非常宽容,所以在这种情况下,子查询连接可能根本不需要。你的意思是,如果在字段列表中运行子查询,它仍然可以工作吗?伟大的Michael,我正在测试。感谢you@JaredFarrish不,我的意思是,如果用户直接离开已加入的书籍并将
COUNT(readby)
包含在字段列表中,而不必
groupby
字段列表中的所有其他列,只需
groupby user\u id
@fogsy
usersread
是子查询的表别名,我知道没有该名称的实际表。我这样做的方式是将所有用户详细信息与阅读的书籍数量一起拉出来。