подсчет данных из разных таблиц
как заменить следующие запросы, одним
SELECT COUNT(user) FROM table1 WHERE user = '$user'
SELECT COUNT(user) FROM table2 WHERE user = '$user'
SELECT COUNT(user) FROM table3 WHERE user = '$user'
.................................
SELECT COUNT(user) FROM table50 WHERE user = '$user'
Заранее благодарю!!!!!!!!
SELECT ( SELECT count(*) FROM table1 WHERE user = '$user') + (SELECT count(*) FROM table2 WHERE user = '$user') + (SELECT count(*) FROM table3 WHERE user = '$user');
ЗЫ какая БД?
mySQL
(SELECT COUNT(user) as count1 FROM table1 WHERE user = '$user') as q1
(SELECT COUNT(user) as count2 FROM table2 WHERE user = '$user') as q2
(SELECT COUNT(user) as count3 FROM table3 WHERE user = '$user') as q3
SELECT count(DISTINCT table1.user), count(DISTINCT table2.user) FROM `table1`, `table2` where table1.user = $user && table2.user = $user
или как то оптимизировать этот запрос, таблиц очень много
SELECT count(DISTINCT table1.user), count(DISTINCT table2.user) FROM `table1`, `table2` where table1.user = $user && table2.user = $user
или как то оптимизировать этот запрос, таблиц очень много
Что тут оптимизировать? попадется 2-3 таблицы хотя бы со стотысячными записями - и если запрос будут дергать постоянно, кранты. А разницы в плане выполнения запроса большой думаю нет или она не критична. Если нужно такое поле количество по юзверю - лучше создать изначально результирующую таблицу куда при любой вставке в другие таблицы, значение счетчика увеличивалось на 1 или вставлялась новая запись. В постгре с этим замечательно справляются триггеры, в мускуле эту логику нужно реализовывать средставми приложения
в некоторых таблицах действительно доходит до 100 тыс записей, поэтому и важно что бы запрос был максимально эффективным :)
Решение я подсказал, хочешь мучить запрос - хоть о бесконечности
Тогда стоит начать с переделки структуры БД.
А вообще нужно ли лепить все в один запрос.
Или все же количество запросов влияет на производительность?
Если с таким запросом у тебя СУБД пашет, значит до критического состояния ситуация еще не дошла. Но любая БД со временем растет и в один далеко не прекрасный день может высниться, что все тико тормозит. Поэтому стоит создать тестовую базу размером в неколько раз большим, что сейчас есть и посмотреть, как себе поведет сервер.