Php SQL按id排序和计数星不工作
我想获得所有记录的编号和最后一条记录:Php SQL按id排序和计数星不工作,php,mysql,Php,Mysql,我想获得所有记录的编号和最后一条记录: $sql_count_sms = "SELECT count(*) as total,content,id FROM android_users_sms WHERE user_id=$id ORDER BY id DESC"; $result_count_sms = mysql_query($sql_count_sms); $row_num_sms = mysql_fetch_assoc($result_count_sms);
$sql_count_sms = "SELECT count(*) as total,content,id FROM android_users_sms WHERE user_id=$id ORDER BY id DESC";
$result_count_sms = mysql_query($sql_count_sms);
$row_num_sms = mysql_fetch_assoc($result_count_sms);
$num_sms = $row_num_sms['total'];
$last_my_sms = $row_num_sms['content'];
我可以获取记录的数量,但无法获取最后一条内容
记录。
它返回第一个记录
我的错在哪里
下面的代码工作正常,但我认为
count(*)
比mysql\u num\u rows
快
$sql_count_sms = "SELECT content,id FROM android_users_sms WHERE user_id=$id ORDER BY id DESC";
$result_count_sms = mysql_query($sql_count_sms);
$row_num_sms = mysql_fetch_assoc($result_count_sms);
$num_sms = mysql_num_rows($result_count_sms);
$last_my_sms = $row_num_sms['content'];
有解决方案吗?您想要的两个结果的粒度不一样。如果不使用子查询,则无法将聚合和单行合并到同一个结果中 将谷物视为结果的基本单位。使用
GROUP BY
和聚合函数可以影响“粒度”。。。表中每行一个结果行,或者它是按用户id等分组的。。。将聚合函数视为分组的一种形式
您可以将其分解为两个单独的语句:
选择count(*)作为android_users_sms的总计,其中user_id=:id代码>
SELECT*FROM android_users_sms,其中user_id=:id ORDER BY id DESC LIMIT 1代码>
另外,针对您的问题,您可能希望将LIMIT 1
与ORDER BY
结合使用,以仅获取最后一行
现在,也许与直觉相反,这也应该起作用:
SELECT count(*), content, id
FROM android_users_sms
WHERE user_id = :id
GROUP BY id, content
ORDER BY id
LIMIT 1;`
这是因为我们已使用分组依据更改了“粒度”。这是真正的细微差别,我觉得这可能比我现在做的更好
您也可以使用如下子查询执行此操作:
SELECT aus.*,
(SELECT count(*) as total FROM android_users_sms WHERE user_id = :id) AS s1
FROM android_users_sms AS aus
WHERE user_id = :id ORDER BY id DESC LIMIT 1;
您使用的聚合函数没有一个分组依据
,因此mysql可以自由地做任何它想做的事情。Marc B的评论提出了您所做的所引入的“模糊性”。