Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как определить численное количество строк в таблице MySQL

312
21 января 2007 года
dead_star
392 / / 26.11.2006
Задача по идее простая, но решения я сам найти не смог.
Есть таблица, предположим, что в ней 50 строк. Я рассматриваю вопрос нормализации данных в SQL. То есть в одном из столбцов идут ссылки на другую таблицу (отношение 5 к 10). То есть к 10 строкам идет один и тот же (как это сказать?) id-шник. Задача следующая - как мне подсчитать количество строк с (например) id-шником “1”, если мне заранее НЕ известно их количество.
Вопрос как вывести их на экран не возникает, возникает вопрос как именно подсчитать их численное количество.
338
21 января 2007 года
chigevara
529 / / 29.09.2003
Цитата: dead_star

Есть таблица, предположим, что в ней 50 строк. Я рассматриваю вопрос нормализации данных в SQL. То есть в одном из столбцов идут ссылки на другую таблицу (отношение 5 к 10). То есть к 10 строкам идет один и тот же (как это сказать?) id-шник.


count, distinct

9.0K
21 января 2007 года
Toxin_F
93 / / 03.01.2007
2 dead_star

В PHP:

 
Код:
$query = mysql_query("select * from НУЖНАЯ_ТАБЛИЦА where id='1'"); // Запрос в таблицу
$numOL = count(mysql_fetch_array($query)); // Число строк
338
21 января 2007 года
chigevara
529 / / 29.09.2003
Цитата: Toxin_F
2 dead_star

В PHP:

 
Код:
$query = mysql_query("select * from НУЖНАЯ_ТАБЛИЦА where id='1'"); // Запрос в таблицу
$numOL = count(mysql_fetch_array($query)); // Число строк


а select count(*) as count from... религия не позволяет? :)

9.0K
21 января 2007 года
Toxin_F
93 / / 03.01.2007
Цитата: chigevara
а select count(*) as count from...


select count(*) - тоже правильно.

Цитата: chigevara
религия не позволяет? :)


Привычка, после такого запроса переменную $query, больше нельзя будет использовать в каких-нибудь других случаях, например в выводе строк.

312
22 января 2007 года
dead_star
392 / / 26.11.2006
Бальшое спасибо за помощь
338
22 января 2007 года
chigevara
529 / / 29.09.2003
Цитата: Toxin_F
select count(*) - тоже правильно.


Извини, но не соглашусь... Ты хочешь сказать что выборка всей таблицы в память скрипта для того что бы посчитать число строк - нормальное решение... А то что предложил я - ТОЖЕ нормальное решение... А как быть с ограничениеми на используемую скриптом память - ни один вменяемый хостер больше пары десятков метров на скрипт не даст... Таблица может просто не поместиться... Как быть с производительностью... С логикой в конце концов... Не надо другим навязывать свои дурные привычки :)

23K
22 января 2007 года
lost_shadow
13 / / 05.01.2007
Цитата: chigevara
Цитата:
select count(*) - тоже правильно.

Извини, но не соглашусь... Ты хочешь сказать что выборка всей таблицы в память скрипта для того что бы посчитать число строк - нормальное решение...



"Эксперт", блин! Всей конторой лежали - молодца, посмешил! SQL-запрос выполняется на стороне MySQL-сервера, и скрипт получает только результат его выполнения, то есть количество строк в таблице. COUNT(*) на одиночной таблице без WHERE будет получен непосредственно из информации таблицы, а с одним условием на равенство числового поля будет работать очень быстро при наличии на это поле индекса.

Автору топика - id-шником (идентификатором) обычно называют число/строку, однозначно идентифицирующее что-либо - в данном случае, строку в таблице базы данных. Если у тебя в одной таблице присутствуют несколько с одинаковым значением - лучше не называть это id-шником. Вероятно, ты имеешь ввиду внешний ключ (Foreign Key)?

Да, забыл сказать - я далеко не "Эксперт" :)

338
22 января 2007 года
chigevara
529 / / 29.09.2003
Цитата: lost_shadow
"Эксперт", блин! Всей конторой лежали - молодца, посмешил! SQL-запрос выполняется на стороне MySQL-сервера, и скрипт получает только результат его выполнения, то есть количество строк в таблице.

Да, забыл сказать - я далеко не "Эксперт" :)



Мои соболезнования вашей конторе...

Ты предлагал выборку ВСЕЙ таблицы в пых скрипт(который таки отдельно от SQL - сервера крутиться) и в этом скрипте уже считал число строк. Любой вменяемый программист поймет что это маразм... И будь поаккуратнее в выражениях...

23K
23 января 2007 года
lost_shadow
13 / / 05.01.2007
Цитата: chigevara
Ты предлагал выборку ВСЕЙ таблицы в пых скрипт(который таки отдельно от SQL - сервера крутиться) и в этом скрипте уже считал число строк.



Нет, я утверждал, что запрос select count(*) from tablename будет выполняться почти мгновенно (см. предыдущий мой пост), и загрузка всей таблицы в скрипт не произойдёт. Насколько я знаю, sql-запрос выполняется на стороне сервера, а скрипт получает результат его выполнения и малое количество служебной информации. Каким образом при этом будет загружаться в скрипт вся таблица - не понимаю.

Цитата: chigevara
И будь поаккуратнее в выражениях...



Мои извинения. И всё же - есть ли ошибки в том, что я написал?

13
23 января 2007 года
RussianSpy
3.0K / / 04.07.2006
2lost_shadow:
2chigevara:
Советую вам внимательно прочитать о чем вы спорите господа... Вы оба по одну сторону баррикад.

Единственное что вызывает сомнения (причем большие) заявление о том что запрос SELECT COUNT(*) FROM table будет использовать служебную информацию. Хотелось бы ссылку на оф. документацию где такое написано. Я не говорю что это не так (я к своему удивлению не могу точно сказать), я просто хочу ссылку на то место где вы такое прочли.

Во всяком случае в других СУБД такого я не наблюдал.
23K
23 января 2007 года
lost_shadow
13 / / 05.01.2007
Цитата: RussianSpy
Единственное что вызывает сомнения (причем большие) заявление о том что запрос 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

13
23 января 2007 года
RussianSpy
3.0K / / 04.07.2006
Спасибо. Честно признаюсь - не знал этого.

Хотя не могу сказать хорошее это свойство СУБД или плохое. Тут нужно подумать.

ЗЫ А вот тесты производительсти MySQL - вранье. Про них уже ходят "притчи во языцах"... Хотя таблички там микроскопические 200 тыс элементов. Вполне вероятно что тут она действительно быстрее.
23K
23 января 2007 года
lost_shadow
13 / / 05.01.2007



Да, в последнем видно, что это верно только для MyISAM-таблиц.

338
23 января 2007 года
chigevara
529 / / 29.09.2003
Цитата: lost_shadow
Нет, я утверждал, что запрос select count(*) from tablename будет выполняться почти мгновенно



Ты будешь в шоке но я утверждал то же самое - и утверждал это Toxin_F - у. Ты вмешался по поводу насмешившего тебя поста, я тоже не особо разобрал - кто о чем, понял что против меня и поехало... В общем нормальное общение, надеюсь никто не пострадал...

15
23 января 2007 года
shaelf
2.7K / / 04.05.2005
При общении, не одного члена форума не пострадало))))
32K
22 сентября 2007 года
Разоблачитель
1 / / 22.09.2007
Цитата: Toxin_F
 
Код:
$numOL = count(mysql_fetch_array($query)); // Число строк

Господь любит идиотов - он столько их создал.
http://php.net/mysql_fetch_array
Типичный пример последствий учения идиотов - http://sql.ru/forum/actualthread.aspx?tid=261568#4691442

7.8K
22 сентября 2007 года
Tingo
201 / / 17.05.2007
так уж лучше сразу:
 
Код:
$numOL = mysql_num_rows($query)); // Число строк


вместо:
 
Код:
$numOL = count(mysql_fetch_array($query)); // Число строк




хотя я сторонник COUNT()'a
2
22 сентября 2007 года
squirL
5.6K / / 13.08.2003
лежал под столом.

ребята, я не эксперт в PHP, но поясните мне, что вернет count, которому передается функция, возвращающая массив? я бы банил за такие советы... зачем форум дискредитировать?
15
23 сентября 2007 года
shaelf
2.7K / / 04.05.2005
Цитата:
что вернет count, которому передается функция, возвращающая массив?


Количество элементов массива.

Цитата:

2
24 сентября 2007 года
squirL
5.6K / / 13.08.2003
прекрасно. теперь объясните мне, нахрена это нужно делать? представьте себе таблицу в миллион строк. обычная такая таблица для production базы. и пропустите ее через такой код. дальше продолжать?
92
24 сентября 2007 года
Тень Пса
2.2K / / 19.10.2006
да, серверу будет плохо ))) решили же, что COUNT(*) будет самым хорошим выходом )))

что-то автора не видно :)

ЗЫ: 2Автор - советую, с такими вопросами, ходить в мануал или FAQ, а не на форум...
15
24 сентября 2007 года
shaelf
2.7K / / 04.05.2005
2Тень Пса Ты посмотри на дату поста. Как обычно, один поднимает (как правило первым своим постом, кричит, что все идиоты), а другие подхватывают. Автор уже дааааавно забил на этот пост, т.к. проблема решена.
2squirL Ты как всегда прав))) Просто спросил, что она вернёт, люди и ответили:)
92
24 сентября 2007 года
Тень Пса
2.2K / / 19.10.2006
точно... надо будет не забывать смотреть на дату поста ))) Разоблачитель м... его итить ))
312
24 сентября 2007 года
dead_star
392 / / 26.11.2006
:eek: мдя...
ну вы ребят загнались :)
валяюсь на полу :D
15
25 сентября 2007 года
shaelf
2.7K / / 04.05.2005
Усё, закрыто.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог