COUNT из 4 таблиц, 4 раза запрос с COUNT или все в одном запросе?

captor

Новичок
COUNT из 4 таблиц, 4 раза запрос с COUNT или все в одном запросе?

Такая ситуация - есть 4 разных несвязанных таблицы. Одна ячейчас cat_id - общая для всех от 1 до 3.

Нужно:
подсчитать в каждой из таблиц количество записей по каждому из cat_id

Для одной таблицы:
PHP:
SELECT COUNT(id) FROM table ORDER by cat_id
вопрос:
можно ли сделать это в одном запросе для четырех таблиц?
нужно ли это? быть может гораздо легче и быстрее сделать 4 раза запрос к каждой из таблиц? COUNT вроде шустрый.

Спасибо!
 

zerkms

TDD infected
Команда форума

captor

Новичок
zerkms, честно не понял про что Вы говорили.
я привел запрос для ясности, как он выглядит, если делать нужную выборку для ЕДИНСТВЕННОЙ таблицы.

А вопрос можно ли сделать это для 4 таблиц одним запросом или делать 4 разных запроса? :) Варианты ответов: первое, второе. Меня это полностью устроит :)

Сейчас сделал 4 разных запроса, но интересно знать.

Спасибо.
 

Sender

Новичок
captor
SELECT ( SELECT count(*) FROM table1 ) as cnt_1, ( SELECT count(*) FROM table2 ) as cnt_2
 

Wicked

Новичок
select "table1", cat_id, count(*) as cnt from table1 group by cat_id
union all
select "table2", cat_id, count(*) as cnt from table2 group by cat_id
union all
...
etc.
 

captor

Новичок
СПАСИБО!
буду тестировать быстройдествие трех способов :)
 

Wicked

Новичок
нужно ли это? быть может гораздо легче и быстрее сделать 4 раза запрос к каждой из таблиц? COUNT вроде шустрый.
шустрый, и именно поэтому это лучше делать оним запросом, чтобы исключить накладные расходы, которые в этом случае бы составляли бы довольно большую часть времени выполнения запроса.

Кстати, а откуда у тебя взялись такие таблицы?
 

captor

Новичок
Жилье абсолютного разного типа, общее только категория и города. ;)

про один запрос понял. Спасибо.

-~{}~ 30.05.07 15:07:

Автор оригинала: Wicked
select "table1", cat_id, count(*) as cnt from table1 group by cat_id
union all
select "table2", cat_id, count(*) as cnt from table2 group by cat_id
union all
...
etc.
не понял, а что такое select "table1" ?
 

zerkms

TDD infected
Команда форума
captor
строковая константа, чтобы потом узнать от какой таблицы данные
 

totamon

Новичок
Жилье абсолютного разного типа, общее только категория и города.
... нет, общее - это жилье... и оно должно быть в одной таблице... правильная структура БД избавит от подобных вопросов...
 

captor

Новичок
totamon хорошо, объясню по-другому :)

есть 10 полей типа smallint в первой таблице,
есть 21 поле типов smallint и varchar вперемешку в другой таблице.

Общее поле только одно - cat_id. Вопрос - как сделать запихнуть все это в одну таблицу? сделать 21 поле NULL, если данные идут для одного типа жилья и 210 NULL, если для другого?

Выборка идет ВСЕГДА из разных таблиц, т.е. нет слияния никакого, кроме этого случая, когда нужно просто указать где скока инфы забито.

Зачем все запихивать в одну таблицу?
Буду рад выслушать Ваши предложения, может я действительно неправильно делаю.
Спасибо.
 

Wicked

Новичок
эти 10+21 полей можно хранить в столбик в таблице со структурой:
object_id | field_id | field_int_value | field_varchar_value

тогда для тех текущих записей, у которых 10 полей, в этой таблице будет по 10 записей. Для тех, у которых 21 - в этой будет 21 запись.
 

A-Lex[FM]

Web/Highload/DataScience
кажется я с неделю назад как раз на счёт такой архитектуры тему поднимал
 
Сверху