SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 23.03.2011 11:12:29

nexus
Завсегдатай
Зарегистрирован: 26.11.2010
Сообщений: 35

Не правильно работае COUNT(*) в запросе

Здравствуйте!
Столкнулся с такой вот проблемой. Имеется таблица компаний и таблица сервисов. Каждая компания может содержать несколько сервисов.
Для этого  было создана 3 таблица site_services_company:


CREATE TABLE IF NOT EXISTS `site_services_company` (
  `id` int(11) NOT NULL auto_increment,
  `service_id` int(11) NOT NULL,
  `company_id` int(11) NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `company_id` (`company_id`),
  KEY `service_id` (`service_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;

INSERT INTO `site_services_company` (`id`, `service_id`, `company_id`) VALUES
(412, 16, 3),
(424, 16, 2),
(423, 15, 2),
(422, 14, 2),
(421, 11, 2),
(420, 10, 2),
(419, 9, 2),
(418, 8, 2),
(574, 16, 4),
(573, 15, 4),
(572, 14, 4),
(571, 11, 4),
(570, 10, 4),
(100, 8, 18),
(99, 6, 18),
(569, 9, 4),
(568, 7, 4),
(567, 6, 4),
(98, 3, 18),
(417, 7, 2),
(416, 6, 2),
(415, 5, 2),
(414, 3, 2),
(413, 4, 2);
 


Стоит задача подсчитать количество компаний по тем или иным сервисам.

Пытаюсь выполнить следующий запрос:


SELECT COUNT(*) AS numrows
FROM site_services_company
WHERE service_id IN ('10', '4', '11', '12', '17', '5', '8')  
 


Но такой запрос выдает не правильный результат. Пробывал добавлять DISTINCT и GROUP BY company_id. Результата никакого!
Помогите пожалуйста!

Неактивен

 

#2 23.03.2011 13:16:09

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Не правильно работае COUNT(*) в запросе

Наверное, Вам поможет
mysql>

select count(service_id),company_id from `site_services_company` group by company_id;

+-------------------+------------+
| count(service_id) | company_id |
+-------------------+------------+
|                12 |          2 |
|                 1 |          3 |
|                 8 |          4 |
|                 3 |         18 |
+-------------------+------------+
4 rows in set (0.00 sec)

Только следите, чтобы дубликатов не было в таблице, то есть чтобы, например, пара 16,2 не встретилась дважды, а то неверный результат будет.
Лучше всего добавьте ключ на пару (service_id`, `company_id).

Ну а если хотите еще фильтровать по перечню сервисов, то можно вот так:
mysql>
select count(service_id),company_id from `site_services_company` where service_id in ('10', '4', '11', '12', '17', '5', '8') group by company_id;

+-------------------+------------+
| count(service_id) | company_id |
+-------------------+------------+
|                 5 |          2 |
|                 2 |          4 |
|                 1 |         18 |
+-------------------+------------+
3 rows in set (0.00 sec)

Отредактированно deadka (23.03.2011 13:18:34)


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 23.03.2011 13:19:02

nexus
Завсегдатай
Зарегистрирован: 26.11.2010
Сообщений: 35

Re: Не правильно работае COUNT(*) в запросе

так не подойдет! Мне надо получить количество компаний для группы сервисов. Мне это надо для реализации пейджинга!

Неактивен

 

#4 23.03.2011 13:20:50

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Не правильно работае COUNT(*) в запросе

Наверное я отредактировал сообщение позже, чем Вы написали свой пост...
Чем именно Вам не подходит приведенный запрос

select count(service_id),company_id from `site_services_company` where service_id in ('10', '4', '11', '12', '17', '5', '8') group by company_id;


?


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 23.03.2011 13:29:04

nexus
Завсегдатай
Зарегистрирован: 26.11.2010
Сообщений: 35

Re: Не правильно работае COUNT(*) в запросе

deadka написал:

Наверное я отредактировал сообщение позже, чем Вы написали свой пост...
Чем именно Вам не подходит приведенный запрос

select count(service_id),company_id from `site_services_company` where service_id in ('10', '4', '11', '12', '17', '5', '8') group by company_id;


?

Данный запрос возвращает количество сервисов для каждой компании! А мне надо узнать общее количество компаний по этим сервисам!

Неактивен

 

#6 23.03.2011 13:37:04

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Не правильно работае COUNT(*) в запросе

ну вообще количество строк в моём последнем запросе - это и есть искомое big_smile.

А вообще это можно узнать путём

SELECT count(distinct company_id) FROM site_services_company WHERE service_id IN ('10', '4', '11', '12', '17', '5', '8');


Такой запрос СОРД?


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#7 23.03.2011 13:40:24

nexus
Завсегдатай
Зарегистрирован: 26.11.2010
Сообщений: 35

Re: Не правильно работае COUNT(*) в запросе

deadka написал:

ну вообще количество строк в моём последнем запросе - это и есть искомое big_smile.

А вообще это можно узнать путём

SELECT count(distinct company_id) FROM site_services_company WHERE service_id IN ('10', '4', '11', '12', '17', '5', '8');


Такой запрос СОРД?

От спасибо! Сработало! Я даже и не знал что можно так count(distinct company_id).
Еще раз спасибо!

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson