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

Имеется таблица городов и регионов, имеющая вид:
id name parent0 Россия NULL1 Московская обл 02 Москва 13 Можайский 14 Можайск 3.........


Собственно, вопрос: как одним запросом, указав id верхнего региона, получить выборку всех его дочерних регионов до 4-ого уровня вложенности включительно?
...
Рейтинг: 0 / 0
Прошу помощи с составлением запроса
    #38727276
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mailz,

4 раза приджойнить таблицу к себе по условию parenttable.id=table.parent
...
Рейтинг: 0 / 0
Прошу помощи с составлением запроса
    #38727461
Mailz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

тогда показывается лишь 4-ый уровень вложенности
...
Рейтинг: 0 / 0
Прошу помощи с составлением запроса
    #38727571
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mailztanglir,

тогда показывается лишь 4-ый уровень вложенности

делай LEFT JOIN.

Вообще, в принципе эту задачу на SQL не решить, нужны конструкции типа CONNECT BY (рекурсивные запросы),
но их MySQL не поддерживает.
...
Рейтинг: 0 / 0
Прошу помощи с составлением запроса
    #38728023
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mailztanglir,

тогда показывается лишь 4-ый уровень вложенности(четверной джойн)
UNION ALL
(тройной джойн)
и так далее

Ну и см. выше ответ мастерзива.
...
Рейтинг: 0 / 0
Прошу помощи с составлением запроса
    #38728137
sigmov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mailz,

Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT * FROM Regions WHERE ID = _ID
UNION
SELECT * FROM Regions WHERE ID IN (SELECT ID FROM Regions WHERE Parent = _ID)
UNION
SELECT * FROM Regions WHERE ID IN (SELECT ID FROM Regions WHERE Parent IN (SELECT ID FROM Regions WHERE Parent = _ID))
UNION
SELECT * FROM Regions WHERE ID IN (SELECT ID FROM Regions WHERE Parent IN (SELECT ID FROM Regions WHERE Parent IN (SELECT ID FROM Regions WHERE Parent = _ID)))
...
Рейтинг: 0 / 0
Прошу помощи с составлением запроса
    #38729676
Фотография barry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mailz,
Для дерева можно сделать вспомогательную таблицу с парами путей (child-parent) от каждого нижнего узла наверх и потом достаточно простыми запросами решаются все вопросы по структуре. Тем более я так понимаю информация по регионам условно-статическая.
Имеем:
0 Россия NULL
1 Московская обл 0
2 Москва 1
3 Можайский 1
4 Можайск
Делаем пары на id соотв. записей (с глубиной или типом объекта):
(чтобы было понятней - я названия регионов тут указываю - вносятся просто id записей)
3 Можайск-Можайский
2 Можайск-Москва
1 Можайск-Московская обл
0 Можайск-Россия
И аналогично от всех нижних регионов наверх.
...
Рейтинг: 0 / 0
Прошу помощи с составлением запроса
    #38731885
Ivan_kez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Прошу помощи в составлении запроса.
Структура
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
CREATE TABLE IF NOT EXISTS `orders` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(512) NOT NULL,
  `count_completed` int(11) NOT NULL,
  `all_count` int(11) NOT NULL,
  `owner_id` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;

INSERT INTO `orders` (`id`, `name`, `count_completed`, `all_count`,  `owner_id`) VALUES
(1, 'order 1', 0, 10, 0, 3, 6),
(2, 'order 2', 5, 10, 0, 0, 3),
(3, 'order 3', 7, 10, 0, 0, 3);

CREATE TABLE IF NOT EXISTS `orders_log` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `order_id` int(11) NOT NULL,
  `user_id` int(11) NOT NULL,
  `is_complete` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;

INSERT INTO `orders_log` (`id`, `order_id`, `user_id`, `is_complete`) VALUES
(1, 2, 6, 1);



Таблица orders - заказы
Таблица orders_log - отклики менеджеров на заказы

Необходимо получить все заказы, которые создал пользователь(owner_id) с ID != 6, на которые он не отзывался (user_id != 6)

Код: sql
1.
SELECT * FROM `orders` LEFT JOIN orders_log ON orders.id = orders_log.`order_id` AND orders_log.user_id != 6  WHERE count_completed < all_count AND owner_id != 6 



Пробовал и с условием на джой и через вложенный запрос.

В результате должна вернуться одна запись из таблицы orders с ID - 3
...
Рейтинг: 0 / 0
Прошу помощи с составлением запроса
    #38731954
CagoBHuK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SELECT *
FROM `orders`
LEFT JOIN orders_log ON orders.id = orders_log.`order_id`
AND orders_log.user_id =6
WHERE count_completed < all_count
AND owner_id !=6
AND orders_log.user_id IS NULL
...
Рейтинг: 0 / 0
Прошу помощи с составлением запроса
    #38731967
Ivan_kez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Действительно! Спасибо!
...
Рейтинг: 0 / 0
Прошу помощи с составлением запроса
    #38732826
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirMailztanglir,

тогда показывается лишь 4-ый уровень вложенности(четверной джойн)
UNION ALL
(тройной джойн)
и так далее

Ну и см. выше ответ мастерзива.

можно и без джоинов...занимался таким :) фильтровать записи на предмет нулов
и в селекте условные блоки...


for id = 448 get all child, child of child,child of child of child... 4 level
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
select 

	f4.idfolder,f4.fk_idfolder

from
	folders f4 
left join 
	folders f3 on (f4.fk_idfolder = f3.idfolder)
left join
	folders f2 on (f3.fk_idfolder = f2.idfolder)
left join
	folders f1 on (f2.fk_idfolder = f1.idfolder)
	
where 
f1.idfolder = 448 ;



448 єто верхний родитель, являеться родителем для самого себя. выход получаем гдето
такой джоинов

прапрадет1 прапрадет1 прапрадет1 прапрадет1 (ибо ссылка на самого себя)
прапрадет1 прапрадет1 прапрадет1 прадед1
прапрадет1 прапрадет1 прапрадет1 прадед2
прапрадет1 прапрадет1 прадед1 папа1
прапрадет1 прапрадет1 прадед1 папа2
прапрадет1 прапрадет1 прадед1 папа3
....

юнионы тут никчему, просто кропотливо посидеть с правильным выбором.

помню когда мне такое надо было, чтото я там с нул значениями мучался...
а именно как отфильтровать
...
Рейтинг: 0 / 0
Прошу помощи с составлением запроса
    #38732927
Фотография barry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453можно и без джоинов...занимался таким :)В принципе можно, когда точно известно что мало уровней. Но в общем случае с произвольным деревом надо работать по "деревянному". Используя соответствующие структуры и подходы. Тогда запросы на выборку значительно упрощаются и голову ломать не надо.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Прошу помощи с составлением запроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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