Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Обработка и вывод информации из БД

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Uchenik
Отправлено: 16 Мая, 2012 - 11:46:38
Post Id



Частый гость


Покинул форум
Сообщений всего: 187
Дата рег-ции: Авг. 2011  


Помог: 1 раз(а)




Вообще-то у меня какбы 2 вопроса.
Задача:
Имеется таблица: id,phone_number,operator,price,status,time
Нужно посчитать:
1.сколько всего записей в таблице
2.сколько раз встречается каждая цена
3.сколько раз встречается каждый из 3 возможных статусов
4.сколько раз встречается каждый оператор
Способы реализации:
1. Создать несколько запросов (по 1 для каждого задания)
2. Вытянуть всё одним запросом и работать с полученным массивом.


Вопрос1: Какой из вариантов будет быстрее, если считать что в таблице около 10000 записей.

Вопрос2: Если сначала всё вытянуть одним запросом, то как патом посчитать всё что нужно имея 1 ассоциативный массив? И на сколько это будет медленнее, учитывая что при работе с этим массивом весь он будет храниться в оперативке.

(Отредактировано автором: 16 Мая, 2012 - 11:50:08)

 
 Top
Zuldek
Отправлено: 16 Мая, 2012 - 11:50:09
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




Сделайте все поля по которым считаете числовыми индексами. И делайте так как вам удобно: несколько запросов или один. Выполнятся он будет доли секунды с вашими порядками значений. Разница ухищрений и оптимизаций будет давать выигрыш в пределах 0.00.. долей секунды.

(Отредактировано автором: 16 Мая, 2012 - 11:52:32)

 
 Top
Uchenik
Отправлено: 16 Мая, 2012 - 12:00:56
Post Id



Частый гость


Покинул форум
Сообщений всего: 187
Дата рег-ции: Авг. 2011  


Помог: 1 раз(а)




Мне всё-таки интересно, ну допустим можно сделать так
PHP:
скопировать код в буфер обмена
  1. $sql="SELECT * FROM {table_name} WHERE `operator`='Beeline'";
  2. $res=mysql_query($sql);
  3. $count=mysql_num_rows($res);


а если я уже сделал вот так:
PHP:
скопировать код в буфер обмена
  1.  
  2. $sql="SELECT * FROM {table_name}";
  3. $res=mysql_query($sql);
  4. $count=mysql_num_rows($res);
  5.  
  6.   if ($count>'0')
  7.      {
  8.        $myr=mysql_fetch_assoc($res);
  9.      }
 
 Top
Zuldek
Отправлено: 16 Мая, 2012 - 12:06:57
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




Можно и так:
SELECT COUNT(id) FROM {table_name}.
Речь о том, что даже для того, чтобы посчитать разницу во времеи исполнения вариантов, вам придется забивать в таблицу данных порядка 100 тыс. - 500 тыс. строк минимум и запускать счетчики времени до и останавливать после выполнения сценария. В вашем случае это выглядит как мытье чистых окон.
 
 Top
Uchenik
Отправлено: 16 Мая, 2012 - 12:11:16
Post Id



Частый гость


Покинул форум
Сообщений всего: 187
Дата рег-ции: Авг. 2011  


Помог: 1 раз(а)




А технически на сколько правильно закидывать базу данных таким количеством запросов?
1. Сколько всего записей в таблице
2. Сколько раз встречается оператор (3 оператора - 3 запроса)
3. Какие значения поля price существуют в БД
4. Сколько номеров конкретного оператора принадлежат к конкретной ценовой группе
5. Какие номеру существуют у конкретного оператора по конкретной цене.


и ещё штук 10 таких запросов.

(Отредактировано автором: 16 Мая, 2012 - 12:12:18)

 
 Top
Zuldek
Отправлено: 16 Мая, 2012 - 12:17:11
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




Технически правильно объединять в 1 запрос те действия, выполнение которых в одном запросе в сравнении с выполнением в разных запросах ускорят выполнение сценария и уменьшат нагрузку на бд.
Например, правильно запрашивать в одном SELECT id, name, text FROM table, а не составлять для этого 3 отдельные запроса.
В случае же ваших выборок, когда в каждой стоят разные задачи, выигрыша в производительности СУБД если вы объедините все эти запросы в 1 вы не получите.
Это может быть оправдано, если вы для удобства вашего скрипта хотите сразу получить единый массив значений для всех этих выборок.

(Отредактировано автором: 16 Мая, 2012 - 12:18:17)

 
 Top
Uchenik
Отправлено: 16 Мая, 2012 - 12:46:40
Post Id



Частый гость


Покинул форум
Сообщений всего: 187
Дата рег-ции: Авг. 2011  


Помог: 1 раз(а)




Да, я просто хочу научиться работать с массивами, поэтому и пытаюсь вытянуть всё одним запросом. Ну вот получил я ассоциативный массив, как мне теперь получить из него количество повторяющихся значений? Ну как например получить количество всех номеров Билайн в массиве?
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB