获取表的总行数

时间:2012-03-13 22:28:32

标签: php mysql sql function prepared-statement

我想在我的sql中获取所有行数。

表的前两列看起来像

enter image description here

我的功能看起来像

            $limit=2;
            $sql = "SELECT id,COUNT(*),dt,title,content FROM news ORDER BY dt DESC LIMIT " . $limit;
            $stmt = $this->db->prepare($sql);
            $stmt->execute();
            $stmt->bind_result($id, $total, $datetime, $title, $content);
            $stmt->store_result();
            $count = $stmt->num_rows;
            if ($count > 0) {
                while ($stmt->fetch()) {

在内部循环中,我得到了$total的确切值,但是MySQL只选择了1行 - 身份编号为1的行(并且$count也是1)

试过这个sql

SELECT id,dt,title,content FROM news ORDER BY dt DESC LIMIT 2

一切顺利。

为什么在第一种情况下它只选择1行?我该如何解决这个问题?

因为我的表有5行。我希望得到所有字段中的2个,并通过一个查询获得所有行数(在这种情况下为5)。

4 个答案:

答案 0 :(得分:2)

如果您想使用GROUP BY dt,请尝试添加COUNT(*)(不知道为什么要使用它)。

修改

好吧,如果你坚持在一次通话中这样做,请点击这里:

$sql = "SELECT id,(SELECT COUNT(id) FROM news) as total,dt,title,content FROM news ORDER BY dt DESC LIMIT " . $limit;

答案 1 :(得分:2)

删除COUNT(*)。如果你留在那里,你将只获得1排。

答案 2 :(得分:0)

这可能是因为变量$ limit被设置为1,或者没有被设置而mysql默认为1.尝试将第一行更改为

$sql = "SELECT id,COUNT(*),dt,title,content FROM news ORDER BY dt DESC";

修改

更改为:

$sql = "SELECT SQL_CALC_FOUND_ROWS,id,dt,title,content FROM news ORDER BY dt DESC LIMIT " . $limit;

然后使用

的第二个查询
SELECT FOUND_ROWS( )

获取与查询匹配的行数

答案 3 :(得分:0)

这个完全发生了一个硬件问题...为什么除了教授的延迟方法来增加一个简单问题的复杂性之外你还不想运行两个查询?

无论如何......这里:

 SELECT id, (SELECT COUNT(*) FROM news) AS row_count, dt, title, content FROM news ORDER BY dt DESC LIMIT