Другие языки программирования и технологии

Возникает ошибка в php mySQL. Подскажите, плиз.

Пишу вот такой код: $ath = mysql_query("select * from city limit 0, 5"); $number = mysql_num_rows($ath); Нужно чтобы в переменную $number записалось общее число строк БД? Но записывается цифра 5, которая указана в LIMIT. Если LIMIT 0, 5 убрать совсем, но работает нормально. В чем причина?
потому что ты считаешь, сколько строк вернул запрос, а вернет он всяко не больше 5. чтобы посчитать, сколько строк всего - надо еще один запросик выполнить
Dan .
Dan .
60 415
Лучший ответ
Александр Фирсанов Мне надо получить общее число строк в таблице. А потом вывести инфу на страницу пользуясь этим лимитом. Нужен второй запрос?
ну, а проблема-то в чём?

ты для чего этот limit используешь? это же и есть ограничение на вывод.. . вот он тебе 5 строк и выводит, как ты просишь

:)
Oleg Nestulenko
Oleg Nestulenko
65 538
Александр Фирсанов Ах, вот оно в чем дело? Лимит у меня стоит на вывод инфы из базы.
Т. е. сначала я должен получить общее количество строк, а потом вывести инфу из базы, пользуясь LIMIT, WHERE, ORDER BY, ну и конечно данными об общем количестве строк.

Без второго запроса обойтись нельзя?
Если нужно просто количество строк в таблице, то это делается по другому.
SELECT COUNT(*) FROM table_name
Den Isayev
Den Isayev
40 015
Александр Фирсанов Это второй запрос надо делать? Тот запрос с лимитом, нужен для вывода данных на страницу. А общее количество строк мне надо получить без лимита. То есть все строки.
Вообще, конечно, здесь придется слать еще один запрос. Но если задачу нужно выполнить без лишнего запроса - предлагаю извращение. Но для этого нужно уточнить выбираемые поля из CITY либо знать их число.

Суть такова.

Запрос, например.. . SELECT COUNT(`id`), NULL FROM `city` UNION SELECT `id`,`name` FROM `city` LIMIT 0,5 - тогда он тебе в ПЕРВОЙ строке вернет поле ID равным COUNT(`id`), т. е. общему числу строк в базе, а со второй строки уже пойдет результат запроса (5 строк которые ты вытащил)
Александр Фирсанов А для чего здесь NULL и UNION? Что они делают?

Еще один момент.
Как лучше писать COUNT(*) или COUNT(id) - Это я имею ввиду обычный запрос, без извращений.

Как вообще она будет быстрей срабатывать?
Юзайте SQL_CALC_FOUND_ROWS
В запросе SELECT перед списком столбцов необходимо указать опцию SQL_CALC_FOUND_ROWS. Выполняя запрос SELECT SQL_CALC_FOUND_ROWS MySQL подсчитает полное число строк, подходящих под условие запроса без LIMIT, и сохранить это число в памяти.

1) SELECT SQL_CALC_FOUND_ROWS * FROM news WHERE activity=1 LIMIT 10
2) SELECT FOUND_ROWS();

Первый запрос вернет (выведет) 10 строк таблицы news, для которых выполняется условие activity=1. Второй вызов команды SELECT возвратит количество строк, которые возвратила бы первая команда SELECT, если бы она была написана без выражения LIMIT. Хотя при использовании команды SELECT SQL_CALC_FOUND_ROWS, MySQL должен пересчитать все строки в наборе результатов, этот способ все равно быстрее, чем без LIMIT, так как не требуется посылать результат клиенту.

http://articles.org.ru/cn/showdetail.php?cid=8575