Внимание! В связи с устареванием топика эта страница была взята из кэша.
|
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 бред какой-то
|
K началу
|
|
|
atrius
Зарегистрирован: 24.06.03
Сообщения: 85
|
Добавлено: 08/04/04 в 13:16
|
|
MIR писал: | Как вариант: из скрипта ты видишь кол-во строк с данными, а в пхпмайадмине - кол-во всех строк (т.е. строк с данными + строк, помеченных как удаленные) |
Не, таблица новая, данные заливались за один приход. Удаленных строк там просто нет. А может есть еще какие пути? Только не надо предлагать нумеровать каждую строку, а потом смотреть максимальный номер - какой-то стремный вариант
|
K началу
|
|
|
NAXER
Зарегистрирован: 01.11.02
Сообщения: 72
|
Добавлено: 08/04/04 в 13:27
|
|
atrius:
Цитата: | или это у меня с перепоя башню сорвало??
|
а сколько ты вчера выпил?
|
K началу
|
|
|
atrius
Зарегистрирован: 24.06.03
Сообщения: 85
|
Добавлено: 08/04/04 в 13:34
|
|
Да не много. Если быть точным 8-10 коктелей водка с мартини, как Джеймс Бонд Но скрипт-то все равно не работает. И хрен знает что делать
|
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- количество строк в запросе .
собсно сабж
|
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- количество строк в запросе . собсно сабж |
Это такая шутка? Его хостеру она не понравится. У него 1500+ строк - и все эти данные извлекать, форматировать и передавать только для того чтобы узнать число строк в таблице? За такое программеров выгоняют без разговоров.
|
K началу
|
|
|
atrius
Зарегистрирован: 24.06.03
Сообщения: 85
|
Добавлено: 08/04/04 в 16:13
|
|
2 Quantum[Tau] Огромное спасибо. Бывает же такое. Нодо точно бросать пить/гулять. Это я все после отпуска не могу отойти, мозг расплавился от солнца, пляжа и гашиша [/b]
|
K началу
|
|
|
mr.GOD
Зарегистрирован: 19.11.03
Сообщения: 674
|
Добавлено: 08/04/04 в 21:41
|
|
Quantum[Tau] писал: | Это такая шутка? Его хостеру она не понравится. У него 1500+ строк - и все эти данные извлекать, форматировать и передавать только для того чтобы узнать число строк в таблице? За такое программеров выгоняют без разговоров.
|
Я бы на вашем месте не спешил с выводами , я получаю от бд-сервера число и все , а вы его заставляете обрабатывать запрос и считать кол-во строк в запросе . По вашему мнению эту функцию написали идиоты от нечего делать(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 началу
|
|
|