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的评论提出了您所做的所引入的“模糊性”。