Другие языки программирования и технологии
Возникает ошибка в php mySQL. Подскажите, плиз.
Пишу вот такой код: $ath = mysql_query("select * from city limit 0, 5"); $number = mysql_num_rows($ath); Нужно чтобы в переменную $number записалось общее число строк БД? Но записывается цифра 5, которая указана в LIMIT. Если LIMIT 0, 5 убрать совсем, но работает нормально. В чем причина?
потому что ты считаешь, сколько строк вернул запрос, а вернет он всяко не больше 5. чтобы посчитать, сколько строк всего - надо еще один запросик выполнить
Александр Фирсанов
Мне надо получить общее число строк в таблице. А потом вывести инфу на страницу пользуясь этим лимитом. Нужен второй запрос?
ну, а проблема-то в чём?
ты для чего этот limit используешь? это же и есть ограничение на вывод.. . вот он тебе 5 строк и выводит, как ты просишь
:)
ты для чего этот limit используешь? это же и есть ограничение на вывод.. . вот он тебе 5 строк и выводит, как ты просишь
:)
Александр Фирсанов
Ах, вот оно в чем дело? Лимит у меня стоит на вывод инфы из базы.
Т. е. сначала я должен получить общее количество строк, а потом вывести инфу из базы, пользуясь LIMIT, WHERE, ORDER BY, ну и конечно данными об общем количестве строк.
Без второго запроса обойтись нельзя?
Т. е. сначала я должен получить общее количество строк, а потом вывести инфу из базы, пользуясь LIMIT, WHERE, ORDER BY, ну и конечно данными об общем количестве строк.
Без второго запроса обойтись нельзя?
Если нужно просто количество строк в таблице, то это делается по другому.
SELECT COUNT(*) FROM table_name
SELECT COUNT(*) FROM table_name
Александр Фирсанов
Это второй запрос надо делать? Тот запрос с лимитом, нужен для вывода данных на страницу. А общее количество строк мне надо получить без лимита. То есть все строки.
Вообще, конечно, здесь придется слать еще один запрос. Но если задачу нужно выполнить без лишнего запроса - предлагаю извращение. Но для этого нужно уточнить выбираемые поля из CITY либо знать их число.
Суть такова.
Запрос, например.. . SELECT COUNT(`id`), NULL FROM `city` UNION SELECT `id`,`name` FROM `city` LIMIT 0,5 - тогда он тебе в ПЕРВОЙ строке вернет поле ID равным COUNT(`id`), т. е. общему числу строк в базе, а со второй строки уже пойдет результат запроса (5 строк которые ты вытащил)
Суть такова.
Запрос, например.. . SELECT COUNT(`id`), NULL FROM `city` UNION SELECT `id`,`name` FROM `city` LIMIT 0,5 - тогда он тебе в ПЕРВОЙ строке вернет поле ID равным COUNT(`id`), т. е. общему числу строк в базе, а со второй строки уже пойдет результат запроса (5 строк которые ты вытащил)
Александр Фирсанов
А для чего здесь NULL и UNION? Что они делают?
Еще один момент.
Как лучше писать COUNT(*) или COUNT(id) - Это я имею ввиду обычный запрос, без извращений.
Как вообще она будет быстрей срабатывать?
Еще один момент.
Как лучше писать 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
В запросе 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
Похожие вопросы
- PHP+MySQL подскажите метод как задавать фотографии в БД если у одной строки (с одним ID) может быть несколько фотографий
- PHP, MySql, HTML... Веб девелоперы HELP плиз! Застряла посередине с курсовой.. . :-(
- Один вопрос оп PHP&MySQL
- PHP+MySQL. Оптимальный вариант управление пользователями.
- Подскажите пожалуйста какой-нибудь неплохой бесплатный хостинг с Php+Mysql
- подскажите дешевый хостинг php, mysql, домен в зоне ru
- Помогите выбрать хостинг? Подскажите хороший и не дорогой хостинг PHP, MySQL и сколько памяти на нём?
- Посоветуйте с чего начать изучать PHP & MySQL
- пишу на delphi,vb.net,php,mysql,html,css но незная матиматики можно пробица в кодеры?
- PHP (MySQL) vs. ASP.NET (MS SQL) - что выбрать и какое у них будущее?