powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите обьединить 2 запроса в один
3 сообщений из 3, страница 1 из 1
Помогите обьединить 2 запроса в один
    #38577894
Nick88hello
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть 2 таблицы в БД :


- users с полями : id|login|pass|db_storage_id*|
db_storage_id - указывает на id таблицы db_storage
- db_storage с полями : id|db_name

Я обращаюсь к данным в таблицах с помощью запросов :

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
/* Выбрать имя БД , с найменьшим количеством зарегистрированных пользователей */
select `d`.`db_name`,count(`u`.`id`) as `users_register` from `users` as `u`,`db_storage` as `d` 
 where `u`.`db_storage_id` = `d`.`id` group by `u`.`db_storage_id` order by `users_register` ASC

/* Выбрать имя БД , в которой не содержится ни одного пользователя */
select `d`.`id`,`d`.`db_name` from `db_storage` as `d` where not exists(
select * from `db_storage` as `d2`,`users` as `u` where `d2`.`id` = `u`.`db_storage_id` and `d2`.`id` = `d`.`id`
)



И самое главное :

Нужно объединить эти 2 запроса в 1 .

Логика такова - выбрать одну строку с именем бд ( поле db_storage.db_name) при условии , если есть БД , с найменьшим количеством зарегистрированных пользователей ИЛИ есть БД , в которой не содержится ни одного пользователя

Шаблон запроса приблизительно такой :

Код: sql
1.
2.
3.
4.
5.
6.
Select db_storage.db_name from db_storage where  (
 db_storage.id=(Подзапрос на нахождение БД с найманьшим кол. пользователей)
 OR
 not exist (Подзапрос на нахождение БД , не содержащей ни одного пользователя)

) limit 1
...
Рейтинг: 0 / 0
Помогите обьединить 2 запроса в один
    #38577903
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nick88helloНужно объединить эти 2 запроса в 1Нельзя объединить два запроса, если у них не совпадают количество и тип полей. Какая бы там ни была логика.

А когда совпадут, просто

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select *
from
(
      select ... -- Запрос 1
   union all
      select ... -- Запрос 2
)
limit 1
...
Рейтинг: 0 / 0
Помогите обьединить 2 запроса в один
    #38577968
Nick88hello
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

AkinaНельзя объединить два запроса, если у них не совпадают количество и тип полей

А если в Select выбирать только db_storage.db_name


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Select `d`.`db_name` 
from `db_storage` as `d` 
where (
	(
	    not exists (
			select `d2`.`db_name` 
			from `db_storage` as `d2`,`users` as `u` 
			where `d2`.`id` = `u`.`db_storage_id` 
			and `d2`.`id` = `d`.`id`
		       )
					
	)
	or
	(...)

	) limit 1



Помогите переписать второй подзапрос на нахождение найменьшего количества зарегистрированных пользователей . Как можно убрать из select-a count(`u`.`id`)
и при этом запрос выполнял тоже самое . Вот если можно было бы так : ...having( min (count(`u`.`id`))) , но так нельзя . В общем ,какие есть еще варианты ?
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите обьединить 2 запроса в один
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]