Как определить численное количество строк в таблице MySQL
Есть таблица, предположим, что в ней 50 строк. Я рассматриваю вопрос нормализации данных в SQL. То есть в одном из столбцов идут ссылки на другую таблицу (отношение 5 к 10). То есть к 10 строкам идет один и тот же (как это сказать?) id-шник. Задача следующая - как мне подсчитать количество строк с (например) id-шником “1”, если мне заранее НЕ известно их количество.
Вопрос как вывести их на экран не возникает, возникает вопрос как именно подсчитать их численное количество.
Есть таблица, предположим, что в ней 50 строк. Я рассматриваю вопрос нормализации данных в SQL. То есть в одном из столбцов идут ссылки на другую таблицу (отношение 5 к 10). То есть к 10 строкам идет один и тот же (как это сказать?) id-шник.
count, distinct
В PHP:
$numOL = count(mysql_fetch_array($query)); // Число строк
В PHP:
$numOL = count(mysql_fetch_array($query)); // Число строк
а select count(*) as count from... религия не позволяет? :)
Извини, но не соглашусь... Ты хочешь сказать что выборка всей таблицы в память скрипта для того что бы посчитать число строк - нормальное решение... А то что предложил я - ТОЖЕ нормальное решение... А как быть с ограничениеми на используемую скриптом память - ни один вменяемый хостер больше пары десятков метров на скрипт не даст... Таблица может просто не поместиться... Как быть с производительностью... С логикой в конце концов... Не надо другим навязывать свои дурные привычки :)
Извини, но не соглашусь... Ты хочешь сказать что выборка всей таблицы в память скрипта для того что бы посчитать число строк - нормальное решение...
"Эксперт", блин! Всей конторой лежали - молодца, посмешил! SQL-запрос выполняется на стороне MySQL-сервера, и скрипт получает только результат его выполнения, то есть количество строк в таблице. COUNT(*) на одиночной таблице без WHERE будет получен непосредственно из информации таблицы, а с одним условием на равенство числового поля будет работать очень быстро при наличии на это поле индекса.
Автору топика - id-шником (идентификатором) обычно называют число/строку, однозначно идентифицирующее что-либо - в данном случае, строку в таблице базы данных. Если у тебя в одной таблице присутствуют несколько с одинаковым значением - лучше не называть это id-шником. Вероятно, ты имеешь ввиду внешний ключ (Foreign Key)?
Да, забыл сказать - я далеко не "Эксперт" :)
Да, забыл сказать - я далеко не "Эксперт" :)
Мои соболезнования вашей конторе...
Ты предлагал выборку ВСЕЙ таблицы в пых скрипт(который таки отдельно от SQL - сервера крутиться) и в этом скрипте уже считал число строк. Любой вменяемый программист поймет что это маразм... И будь поаккуратнее в выражениях...
Нет, я утверждал, что запрос select count(*) from tablename будет выполняться почти мгновенно (см. предыдущий мой пост), и загрузка всей таблицы в скрипт не произойдёт. Насколько я знаю, sql-запрос выполняется на стороне сервера, а скрипт получает результат его выполнения и малое количество служебной информации. Каким образом при этом будет загружаться в скрипт вся таблица - не понимаю.
Мои извинения. И всё же - есть ли ошибки в том, что я написал?
2chigevara:
Советую вам внимательно прочитать о чем вы спорите господа... Вы оба по одну сторону баррикад.
Единственное что вызывает сомнения (причем большие) заявление о том что запрос SELECT COUNT(*) FROM table будет использовать служебную информацию. Хотелось бы ссылку на оф. документацию где такое написано. Я не говорю что это не так (я к своему удивлению не могу точно сказать), я просто хочу ссылку на то место где вы такое прочли.
Во всяком случае в других СУБД такого я не наблюдал.
http://www.botik.ru/~rldp/mysql/mysqladm/glava05.htm
http://archives.neohapsis.com/archives/mysql/2005-q1/2111.html
http://dev.mysql.com/doc/refman/5.0/en/explain.html
Хотя не могу сказать хорошее это свойство СУБД или плохое. Тут нужно подумать.
ЗЫ А вот тесты производительсти MySQL - вранье. Про них уже ходят "притчи во языцах"... Хотя таблички там микроскопические 200 тыс элементов. Вполне вероятно что тут она действительно быстрее.
Да, в последнем видно, что это верно только для MyISAM-таблиц.
Ты будешь в шоке но я утверждал то же самое - и утверждал это Toxin_F - у. Ты вмешался по поводу насмешившего тебя поста, я тоже не особо разобрал - кто о чем, понял что против меня и поехало... В общем нормальное общение, надеюсь никто не пострадал...
Господь любит идиотов - он столько их создал.
http://php.net/mysql_fetch_array
Типичный пример последствий учения идиотов - http://sql.ru/forum/actualthread.aspx?tid=261568#4691442
вместо:
хотя я сторонник COUNT()'a
ребята, я не эксперт в PHP, но поясните мне, что вернет count, которому передается функция, возвращающая массив? я бы банил за такие советы... зачем форум дискредитировать?
Количество элементов массива.
что-то автора не видно :)
ЗЫ: 2Автор - советую, с такими вопросами, ходить в мануал или FAQ, а не на форум...
2squirL Ты как всегда прав))) Просто спросил, что она вернёт, люди и ответили:)
ну вы ребят загнались :)
валяюсь на полу :D