Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Подсчитать количество постов в категориях
 
 автор: kulibko   (11.12.2007 в 00:35)   письмо автору
 
 

Есть таблица (id, post_id, cat_id) = айди связи - айди поста - айди категории (в которой этот пост лежит).
Как оптимально подсчитать (за один запрос) количество статей в каждой из категории? (кстати нужно в sqlite, но думаю в mysql делается аналогично)

Заранее спасибо :)

   
 
 автор: kulibko   (11.12.2007 в 00:40)   письмо автору
 
   для: kulibko   (11.12.2007 в 00:35)
 

о, похоже это "SELECT *, COUNT(*) from $table_post_to_category GROUP BY cat_id" то что нужно

   
 
 автор: Trianon   (11.12.2007 в 00:42)   письмо автору
 
   для: kulibko   (11.12.2007 в 00:40)
 

За SELECT * ...GROUP BY нужно расстреливать. Деревянными пулями.

   
 
 автор: kulibko   (11.12.2007 в 01:05)   письмо автору
 
   для: Trianon   (11.12.2007 в 00:42)
 

Объясните пожалуйста почему.

Проверил быстродействие - (*, count(*)) запрос выполнялся 0.0003 секунды, а (cat_id, count(*)) - 0.0002 секунды.

   
 
 автор: Trianon   (11.12.2007 в 01:20)   письмо автору
 
   для: kulibko   (11.12.2007 в 01:05)
 

http://softtime.ru/forum/read.php?id_forum=3&id_theme=38605

хотя все равно это всё бисер....

   
 
 автор: kulibko   (11.12.2007 в 01:30)   письмо автору
 
   для: Trianon   (11.12.2007 в 01:20)
 

Спасибо :)

   
 
 автор: Trianon   (11.12.2007 в 00:41)   письмо автору
 
   для: kulibko   (11.12.2007 в 00:35)
 


SELECT cat_id, COUNT(cat_id) AS cnt  
  FROM link_table 
  GROUP BY cat_id


Есть ли в sqlite GROUP BY - выясняйте сами :)

   
 
 автор: kulibko   (11.12.2007 в 01:08)   письмо автору
 
   для: Trianon   (11.12.2007 в 00:41)
 

я через pdo работаю, там есть :)

   
 
 автор: cheops   (11.12.2007 в 00:43)   письмо автору
 
   для: kulibko   (11.12.2007 в 00:35)
 

Для этого удобно воспользоваться запросом
SELECT cat_id, COUNT(*) FROM tbl
GROUP BY cat_id

   
 
 автор: kulibko   (11.12.2007 в 01:13)   письмо автору
 
   для: cheops   (11.12.2007 в 00:43)
 

А расскажите пожалуйста еще такое:
Есть таблица $table_posts с постами (сейчас там около 5000 записей)

Почему же "SELECT count(*) from $table_posts" исполняется целых 0.3-0.5 секунды?
(в прошлом примере в таблице связей было тоже около 5000 связей)

   
 
 автор: Trianon   (11.12.2007 в 01:24)   письмо автору
 
   для: kulibko   (11.12.2007 в 01:13)
 

первичный ключ у таблицы есть?

попробуйте SELECT COUNT(первичный_ключ) FROM $table_posts замерить.

   
 
 автор: kulibko   (11.12.2007 в 01:30)   письмо автору
 
   для: Trianon   (11.12.2007 в 01:24)
 

Первичный ключ есть, пробовал - та же скорость.
SELECT id from $table_posts = 0.0002 секунды
SELECT COUNT(id) from $table_posts = 0.2 с.

Еще интересно:
SELECT id, count(id) from $table_posts GROUP BY id = 0.0002 секунды
SELECT id, count(id) from b_1_posts = за 0.2 секунды...

   
 
 автор: Trianon   (11.12.2007 в 01:44)   письмо автору
 
   для: kulibko   (11.12.2007 в 01:30)
 

У Вас за этой переменной $table_posts одна таблица скрывается или JOIN-соединение?
потому что странный какой-то результат....

>SELECT id, count(id) from b_1_posts = за 0.2 секунды...
нет... всё же придется расстрелять...

   
 
 автор: kulibko   (11.12.2007 в 11:01)   письмо автору
 
   для: Trianon   (11.12.2007 в 01:44)
 

Только одна таблица...
Да, результат и мне кажется странным :)
"Не стреляй в воробьев..."

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования