Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Список групп индикацией вхождения объекта в группу / 16 сообщений из 16, страница 1 из 1
22.09.2014, 21:39:22
    #38753997
Список групп индикацией вхождения объекта в группу
Добрый день.
Извините за возможно глупый вопрос.
Помогите пожалуйста составить запрос, либо подскажите, как правильнее реализовать следующее:
Имеются две таблицы: 1) groups с полями [ID; GROUPNAME] и 2) objects_groups [OBJECTID; GROUPID]
Задача простая. Вывести список всех групп с отметками, в какую группу входят объекты из условия WHERE.

Например таблицы имеют вид:
groups
Код: sql
1.
2.
3.
4.
1 | Group 1
2 | Group 2
3 | Group 3
4 | Group 4



object_groups
Код: sql
1.
2.
3.
4.
5.
1 | 1
1 | 3
2 | 1
2 | 2
1 | 4



Нужно получить на выходе, при использовании условия WHERE OBJECTID = 1 следующее:
Код: sql
1.
2.
3.
4.
Group 1 | 1
Group 2 | null
Group 3 | 1
Group 4 | 1



Спасибо за ваше время.
...
Рейтинг: 0 / 0
22.09.2014, 22:03:38
    #38754013
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список групп индикацией вхождения объекта в группу
вот так:

Код: sql
1.
select g.tit, og.id from groups g left join object_groups og where og.id = 1
...
Рейтинг: 0 / 0
22.09.2014, 22:21:16
    #38754024
Список групп индикацией вхождения объекта в группу
Lumixвот так:

Код: sql
1.
select g.tit, og.id from groups g left join object_groups og where og.id = 1



Видимо, вместо where имелось ввиду on ?
Код: sql
1.
select g.groupname, og.objectid from groups g left join objects_groups og where og.objectid = 1


К сожалению, запрос выводит:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Group 1 | 1
Group 2 | 1
Group 3 | 1
Group 4 | 1
Group 1 | 1
Group 2 | 1
Group 3 | 1
Group 4 | 1
Group 1 | 1
Group 2 | 1
Group 3 | 1
Group 4 | 1


А при условии WHERE og.id = 2 выводит:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
Group 1 | 2
Group 2 | 2
Group 3 | 2
Group 4 | 2
Group 1 | 2
Group 2 | 2
Group 3 | 2
Group 4 | 2
...
Рейтинг: 0 / 0
22.09.2014, 22:23:43
    #38754029
Список групп индикацией вхождения объекта в группу
Код: sql
1.
select g.groupname, og.objectid from groups g left join objects_groups og on og.objectid = 1
...
Рейтинг: 0 / 0
22.09.2014, 22:33:02
    #38754035
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список групп индикацией вхождения объекта в группу
Денис Бондарь
Код: sql
1.
select g.groupname, og.objectid from groups g left join objects_groups og on og.objectid = 1



Помогло?
...
Рейтинг: 0 / 0
22.09.2014, 22:43:23
    #38754041
Список групп индикацией вхождения объекта в группу
Lumix,

К сожалению нет. Вывод выше привел. С where вообще не работает.
...
Рейтинг: 0 / 0
22.09.2014, 22:48:13
    #38754043
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список групп индикацией вхождения объекта в группу
Денис БондарьLumix,

К сожалению нет. Вывод выше привел. С where вообще не работает.

эх...))) я просто надеялся что может быть бывают исключения...))) но каждый день одно и то же..)))
короче правильно вот так


Код: sql
1.
2.
3.
4.
select g.groupname, og.objectid 
    from groups g left join objects_groups og on g.objectid = og.objectid  

where og.objectid = 1
...
Рейтинг: 0 / 0
22.09.2014, 23:01:52
    #38754056
Список групп индикацией вхождения объекта в группу
LumixДенис БондарьLumix,

К сожалению нет. Вывод выше привел. С where вообще не работает.

эх...))) я просто надеялся что может быть бывают исключения...))) но каждый день одно и то же..)))
короче правильно вот так


Код: sql
1.
2.
3.
4.
select g.groupname, og.objectid 
    from groups g left join objects_groups og on g.objectid = og.objectid  

where og.objectid = 1



Ну :) Это был мой первый вариант, который не заработал, как и многие другие варианты. Именно поэтому я обратился сюда.
Такая выборка выводи только те группы, в которые входит объект. Группы, в которые он не входит не выводятся.
...
Рейтинг: 0 / 0
22.09.2014, 23:39:35
    #38754079
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список групп индикацией вхождения объекта в группу
Денис Бондарь,

тогда вот так

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select groupname, if 
(
    exists
    (
        select * from groups g join object_groups og on (g.id = og.object_id) 
            where og.id = 1 and g.id = b.id
    )

    , 1
    , null
) st 

from a1 b;
...
Рейтинг: 0 / 0
22.09.2014, 23:47:41
    #38754083
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список групп индикацией вхождения объекта в группу
Второй вариант

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select b.groupname, t.st from groups b left join
(
    select g.id id, 1 as st from groups g join object_groups og 
         on (g.id = og.groupid) 
    where og.id = 1

) t 

on b.id = t.id
...
Рейтинг: 0 / 0
23.09.2014, 09:20:36
    #38754230
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список групп индикацией вхождения объекта в группу
Код: sql
1.
2.
3.
4.
select g.groupname, count(og.objectid) cnt
from groups g 
left join object_groups og 
on g.id = og.groupid and og.objectid=1



Lumix
Код: sql
1.
... left join object_groups og where og.id = 1


Так левое соединение вырождается во внутреннее.
...
Рейтинг: 0 / 0
23.09.2014, 09:21:29
    #38754231
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список групп индикацией вхождения объекта в группу
Пардон,

Код: sql
1.
2.
3.
4.
5.
select g.groupname, count(og.objectid) cnt
from groups g 
left join object_groups og 
on g.id = og.groupid and og.objectid=1
group by g.groupname
...
Рейтинг: 0 / 0
23.09.2014, 10:03:10
    #38754259
Список групп индикацией вхождения объекта в группу
Lumix , Akina , большое спасибо за помощь!

Заработал как нужно последний вариант. Мне стыдно, что сам не мог додуматься до этого. Всё гениальное - просто.

Akina
Код: sql
1.
2.
3.
4.
5.
select g.groupname, count(og.objectid) cnt
from groups g 
left join object_groups og 
on g.id = og.groupid and og.objectid=1
group by g.groupname



Хорошего вам дня!
...
Рейтинг: 0 / 0
23.09.2014, 12:06:48
    #38754414
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список групп индикацией вхождения объекта в группу
Денис Бондарь Lumix , Akina , большое спасибо за помощь!

Заработал как нужно последний вариант. Мне стыдно, что сам не мог додуматься до этого. Всё гениальное - просто.

Akina
Код: sql
1.
2.
3.
4.
5.
select g.groupname, count(og.objectid) cnt
from groups g 
left join object_groups og 
on g.id = og.groupid and og.objectid=1
group by g.groupname



Хорошего вам дня!

блин, опять у меня демотивация... я как лох думал, что по условиям задачи в пустом месте должен быть null, а оказывается человека у ноль устраивает... жизнь - боль!!!
...
Рейтинг: 0 / 0
23.09.2014, 19:55:18
    #38755208
Список групп индикацией вхождения объекта в группу
Lumix,

Извините :)
"Задача простая. Вывести список всех групп с отметками, в какую группу входят объекты из условия."
Неважно, какие это будут отметки. Главное каким-то образом показать, в какие группы входит объект.

Спасибо за Вашу помощь! Ваши варианты тоже помогли разобраться как должно работать. Так что Ваши старания не в пустую. Уверяю Вас!
...
Рейтинг: 0 / 0
23.09.2014, 20:36:16
    #38755229
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список групп индикацией вхождения объекта в группу
Денис Бондарь,

у меня лично к вам нет претензий. У меня претензии как бы к природе вещей...))
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Список групп индикацией вхождения объекта в группу / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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