Реклама на сайте Advertise with us
Тема: Определить кол-во строк в таблице (MYSQL) Расширенный поиск по форуму
 
Внимание! В связи с устареванием топика эта страница была взята из кэша.
Автор Сообщение
Информация о пользователе atrius


Зарегистрирован: 24.06.03
Сообщения: 85
Ссылка на сообщениеДобавлено: 08/04/04 в 12:18     

Совсем после отпуска мозги расплавились.
Делаю вот так:
$query = "select count (*) from tablename";
$result = mysql_query ($query);
$row = mysql_fetch_array($result, MYSQL_BOTH);
echo "row is $row";
Пишет row = 1450
Дальше веселее, захожу в phpmyadmin смотрю таблицу и вижу что кол-во строк 1506. Где я ошибся, или это у меня с перепоя башню сорвало??
Спасибо.

K началу

 
Информация о пользователе NAXER


Зарегистрирован: 01.11.02
Сообщения: 72
Ссылка на сообщениеДобавлено: 08/04/04 в 13:06     

а ты выполни свой запрос в phpmyadmin посмотри что скажет

K началу

 
Информация о пользователе MIR


Зарегистрирован: 03.02.03
Сообщения: 964
Ссылка на сообщениеДобавлено: 08/04/04 в 13:07     

Как вариант:
из скрипта ты видишь кол-во строк с данными, а в пхпмайадмине - кол-во всех строк (т.е. строк с данными + строк, помеченных как удаленные)

K началу

 
Информация о пользователе atrius


Зарегистрирован: 24.06.03
Сообщения: 85
Ссылка на сообщениеДобавлено: 08/04/04 в 13:13     

NAXER писал:
а ты выполни свой запрос в phpmyadmin посмотри что скажет

в phpmyadmin тоже показывает 1506
бред какой-то icon_sad.gif

K началу

 
Информация о пользователе atrius


Зарегистрирован: 24.06.03
Сообщения: 85
Ссылка на сообщениеДобавлено: 08/04/04 в 13:16     

MIR писал:
Как вариант:
из скрипта ты видишь кол-во строк с данными, а в пхпмайадмине - кол-во всех строк (т.е. строк с данными + строк, помеченных как удаленные)

Не, таблица новая, данные заливались за один приход. Удаленных строк там просто нет.
А может есть еще какие пути? Только не надо предлагать нумеровать каждую строку, а потом смотреть максимальный номер - какой-то стремный вариант icon_smile.gif

K началу

 
Информация о пользователе NAXER


Зарегистрирован: 01.11.02
Сообщения: 72
Ссылка на сообщениеДобавлено: 08/04/04 в 13:27     

atrius:

Цитата:

или это у меня с перепоя башню сорвало??

а сколько ты вчера выпил? icon_smile.gif

K началу

 
Информация о пользователе atrius


Зарегистрирован: 24.06.03
Сообщения: 85
Ссылка на сообщениеДобавлено: 08/04/04 в 13:34     

Да не много. Если быть точным 8-10 коктелей водка с мартини, как Джеймс Бонд icon_smile.gif
Но скрипт-то все равно не работает. И хрен знает что делать

K началу

 
Информация о пользователе mr.GOD


Зарегистрирован: 19.11.03
Сообщения: 674
Ссылка на сообщениеДобавлено: 08/04/04 в 14:31     

$query="select * from tablename";
$result_query=mysql_query($query) or die(mysql_error());
$num_rows=mysql_num_rows($result_query);

$num_rows- количество строк в запросе .

собсно сабж icon_smile.gif

K началу

 
Информация о пользователе Quantum[Tau]


Зарегистрирован: 15.03.04
Сообщения: 618
Ссылка на сообщениеДобавлено: 08/04/04 в 16:04     

atrius писал:
Совсем после отпуска мозги расплавились.
Делаю вот так:
$query = "select count (*) from tablename";
$result = mysql_query ($query);
$row = mysql_fetch_array($result, MYSQL_BOTH);
echo "row is $row";
Пишет row = 1450
Дальше веселее, захожу в phpmyadmin смотрю таблицу и вижу что кол-во строк 1506. Где я ошибся, или это у меня с перепоя башню сорвало??
Спасибо.


1. между count и (*) пробела быть не должно:
Код:
select count(*) from tablename

(твой mysql это принимает, но не факт что на другом хосте будет работать)

2. mysql_fetch_array() возвращает что? правильно, array (ассоциативный массив значений). Так что echo "row is $row" выдать то что ты хочешь ну никак не сможет. Поправь на:
Код:
echo "row is $row[0]";


PS. WANTED: баг-хантер для PHP, анализирующий код и предупреждающий о подобных логических ошибках. Есть такое?

K началу

 
Информация о пользователе Quantum[Tau]


Зарегистрирован: 15.03.04
Сообщения: 618
Ссылка на сообщениеДобавлено: 08/04/04 в 16:07     

mr.GOD писал:
$query="select * from tablename";
$result_query=mysql_query($query) or die(mysql_error());
$num_rows=mysql_num_rows($result_query);
$num_rows- количество строк в запросе .
собсно сабж icon_smile.gif


Это такая шутка? Его хостеру она не понравится. У него 1500+ строк - и все эти данные извлекать, форматировать и передавать только для того чтобы узнать число строк в таблице? За такое программеров выгоняют без разговоров.

icon_smile.gif

K началу

 
Информация о пользователе atrius


Зарегистрирован: 24.06.03
Сообщения: 85
Ссылка на сообщениеДобавлено: 08/04/04 в 16:13     

2 Quantum[Tau]
Огромное спасибо. Бывает же такое. Нодо точно бросать пить/гулять. Это я все после отпуска не могу отойти, мозг расплавился от солнца, пляжа и гашиша icon_smile.gif[/b]

K началу

 
Информация о пользователе mr.GOD


Зарегистрирован: 19.11.03
Сообщения: 674
Ссылка на сообщениеДобавлено: 08/04/04 в 21:41     

Quantum[Tau] писал:
Это такая шутка? Его хостеру она не понравится. У него 1500+ строк - и все эти данные извлекать, форматировать и передавать только для того чтобы узнать число строк в таблице? За такое программеров выгоняют без разговоров.
icon_smile.gif


Я бы на вашем месте не спешил с выводами , я получаю от бд-сервера число и все , а вы его заставляете обрабатывать запрос и считать кол-во строк в запросе . По вашему мнению эту функцию написали идиоты от нечего делать(mysql_num_rows) ?

K началу

 
Информация о пользователе Stek


Зарегистрирован: 24.10.02
Сообщения: 1613
Ссылка на сообщениеДобавлено: 08/04/04 в 22:54     

mr.GOD:
при select * from tablename вы заставляете:
1. выбрать базу данных все записи и подготовить их для вывода.
2. хранить этот результат и соответственно расходовать на все это память
3. подсчитать число строк

В то же время SELECT COUNT(id) AS _count FROM tablename заставить подсчитать число первичных ключиков ... и все. Результат в десятки раз более быстрый и не требующий от базы каких либо усилий.

mysql_num_rows написан не идиотами, но и совершенно не для того чтобы узнавать число записей в базе.
Так что пожалейте сервер, им не только вы пользуетесь (если у вас не дедикейт конечно).

K началу

 
Информация о пользователе Quantum[Tau]


Зарегистрирован: 15.03.04
Сообщения: 618
Ссылка на сообщениеДобавлено: 08/04/04 в 23:20     

mr.GOD писал:
Я бы на вашем месте не спешил с выводами , я получаю от бд-сервера число и все , а вы его заставляете обрабатывать запрос и считать кол-во строк в запросе . По вашему мнению эту функцию написали идиоты от нечего делать(mysql_num_rows) ?


Я бы на твоем месте, перед тем как нести бред и позориться перед грамотной публикой, посмотрел бы исходники mysql и php4. Сделай это сейчас и ужаснись от объема работы, который ты хочешь возложить на сервер БД, модуль php в апаче и операционную систему. Stek написал малую часть из того что там реально происходит.

K началу

 
Информация о пользователе Jark


Зарегистрирован: 05.01.04
Сообщения: 92
Ссылка на сообщениеДобавлено: 08/04/04 в 23:21     

mr.GOD писал:
Я бы на вашем месте не спешил с выводами , я получаю от бд-сервера число и все , а вы его заставляете обрабатывать запрос и считать кол-во строк в запросе . По вашему мнению эту функцию написали идиоты от нечего делать(mysql_num_rows) ?

mr.GOD - ты не прав

K началу

 
Информация о пользователе Jark


Зарегистрирован: 05.01.04
Сообщения: 92
Ссылка на сообщениеДобавлено: 08/04/04 в 23:29     

Stek писал:

В то же время SELECT COUNT(id) AS _count FROM tablename заставить подсчитать число первичных ключиков ... и все. Результат в десятки раз более быстрый и не требующий от базы каких либо усилий.


Всё даже ещё более приятно: читаем раздел "5.2.4 How MySQL Optimises WHERE Clauses", и видим:
 COUNT(*) on a single table without a WHERE is retrieved directly from the table information
for MyISAM and HEAP tables. This is also done for any NOT NULL expression
when used with only one table.

т.е. выходит что при запросе товарища atrius-а данные извлекаются из метаданных таблицы, без работы с самими данными!

K началу

 
Информация о пользователе Stek


Зарегистрирован: 24.10.02
Сообщения: 1613
Ссылка на сообщениеДобавлено: 09/04/04 в 01:34     

Jark:
То же самое, но по русски.
http://www.phpdevs.com/doc/mysql_manual_ru/Where_optimisations.html

Вобще есть там одно интересное условие

Цитата:
Для таблиц HEAP и MyISAM функция COUNT(*), которая вызывается для одной таблицы и не содержит предложения WHERE, берется непосредственно из табличной информации. Это делается также для любого выражения NOT NULL, в котором используется только одна таблица.

Обрати внимание на последнюю фразу. Так что лучше придерживатся стандартного синтаксиса SQL запросов.

K началу

 
Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!
Внимание! В связи с устареванием топика эта страница была взята из кэша.

Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »