嘿伙计们快速提问,我有一个查询,我想要计算它找到的所有条目,并选择全部,所以当我使用while($row=mysql_fetch_assoc($query)){
时,它会列出所有条目。我遇到的问题是,虽然所有条目都已成功计算并且列出了正确的数字,但只有当我回显$ row ['title']时才会选择并列出最新的条目。如果我删除, COUNT(*) as total
,那么它会选择所有,但我想知道是否可以使用count并选择*。我想知道是否有人知道我做错了什么?
SELECT *, COUNT(*) as total FROM new_messages WHERE username='$session->username
答案 0 :(得分:2)
为什么你需要计算每一行?您只需要获取一次,就可以使用mysql_num_rows
:
$res = mysql_query("SELECT * FROM new_messages WHERE username='$session->username");
$count = mysql_num_rows($res);
或者您可以直接获取计数:
list($count) = mysql_fetch_row(mysql_query("SELECT COUNT(*) FROM new_messages WHERE username='$session->username"));
答案 1 :(得分:1)
如果您打算获取所有记录,请计算客户端的记录(从MySQL的角度来看,即您的PHP脚本)。
如果您正在使用未缓冲的查询,则首先获取所有记录,然后调用计算结果记录的函数/方法(例如mysql_num_rows())。如果您正在使用缓冲查询,则函数/方法调用的顺序无关紧要。
p.s。:您只获得“最后一条记录”的值,因为使用像Count()这样的聚合函数而没有GROUP BY子句会使所有记录一个组。见http://dev.mysql.com/doc/refman/5.1/en/group-by-functions.html
MySQL允许您选择不属于GROUP BY子句的列,但http://dev.mysql.com/doc/refman/5.1/en/group-by-hidden-columns.html表示:
使用此功能时,每个组中的所有行对于从GROUP BY部分省略的列应具有相同的值。 服务器可以自由地从组中返回任何值,因此除非所有值都相同,否则结果是不确定的。
答案 2 :(得分:1)
首先,您不应该使用mysql_fetch_assoc()
,因为mysql_
函数已过时。
至少,您应该切换到使用MySQL Improved Extension (mysqli) functions或更一般的PDO功能。
如果您使用mysqli,则可以使用mysqli_result->num_rows()
来计算结果中的行数,该页面上有一个代码示例,说明如何使用它。
PDO没有计算结果集中行的功能,但您可以使用fetchAll()
,然后只检查您获取的数组的大小。
为了完整起见,如果你坚持mysql_
函数(你不应该这样做,因为你冒着安全问题),你可以使用mysql_num_rows()
。