Получить общее количество строк таблицы - PullRequest
0 голосов
/ 14 марта 2012

Я хочу получить количество строк в моем sql.

Первые 2 столбца таблицы выглядят так

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 ]

2 голосов
/ 14 марта 2012

Удалить COUNT (*). Вы получите только один ряд, если оставите его там.

2 голосов
/ 14 марта 2012

Попробуйте добавить GROUP BY dt, если хотите использовать COUNT(*) (хотя не знаю, почему вы его используете).

EDIT

Хорошо, если вы настаиваете на том, чтобы сделать это за один звонок, здесь:

$sql = "SELECT id,(SELECT COUNT(id) FROM news) as total,dt,title,content FROM news ORDER BY dt DESC LIMIT " . $limit;
0 голосов
/ 14 марта 2012

Это полностью проблемы HW ... почему, кроме метода отсталого профессора, чтобы добавить сложность к простой проблеме, вы бы не хотели запускать два запроса?

в любом случае .... здесь:

 SELECT id, (SELECT COUNT(*) FROM news) AS row_count, dt, title, content FROM news ORDER BY dt DESC LIMIT 
0 голосов
/ 14 марта 2012

Вероятно, это связано с тем, что переменная $ limit установлена ​​в 1 или не установлена, а mysql по умолчанию равен 1. Попробуйте изменить первую строку на

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

EDIT

Изменить на:

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

И затем использовать второй запрос с

SELECT FOUND_ROWS( )

, чтобы получить количество строк, соответствующих запросу

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...