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

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

Участники А, В и С.

Союз считается созданным когда каждый из трех участников подаст заявки на создание союза с двумя другими.

Имеется таблица "proposal" заявок с двумя полями:
`member_A` (int)
`member_B` (int)

Для союза из трех участников, записей должно быть 6:

А хочет дружить с В
А хочет дружить с С
B хочет дружить с A
B хочет дружить с С
C хочет дружить с A
C хочет дружить с B

Вопрос, как одним запросом выбрать, есть ли всё для того что бы союз между А, В и С ?
...
Рейтинг: 0 / 0
Помогите решить задачу
    #39223941
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий shinobisun,

Союзы всегда строго трехсторонние?
...
Рейтинг: 0 / 0
Помогите решить задачу
    #39223942
Ошибся с формулировкой. Как на SQL решить задачу для N участников, 2, 3, 4 и т.д.
...
Рейтинг: 0 / 0
Помогите решить задачу
    #39223947
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий shinobisun,

А какова сама задача?
Найти все союзы в таблице или определить факт союза для произвольного набора участников?
...
Рейтинг: 0 / 0
Помогите решить задачу
    #39223953
Задача узнать, состоит ли конкретный участник в правильном союзе.

Т.е. А заявляет что хочет дружить с С и хочет дружить с В. После добавления этих двух записей нужно проверить, готов ли союз для А, В и С (подали ли уже точно так же В и С заявки) при том что B и C мне надо узнать уже из самого запроса, есть только А. Если С подал что хочет дружить с А и с X, то союза уже не может быть.
...
Рейтинг: 0 / 0
Помогите решить задачу
    #39223962
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий shinobisunЕсли С подал что хочет дружить с А и с X, то союза уже не может быть.А если С хочет дружить с А, В и Х, то союз А-В-С считается действующим? (считаем А и В хотят дружить между собой и с С)
...
Рейтинг: 0 / 0
Помогите решить задачу
    #39223965
Нет, программно союз стоит с определенным количеством участников. Сейчас их может быть 2 или 3. Дается возможность выбора, я хочу дружить втроем или вдвоем. Если выбрал втроем, то принимается по две заявки от пользователя.
...
Рейтинг: 0 / 0
Помогите решить задачу
    #39224024
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
SELECT 1
FROM `table`
WHERE `member_A` IN (список)
  AND `member_B` IN (тот же список)
HAVING COUNT(DISTINCT (`member_A`, `member_B`)) = fnFactorial(кол. уник. записей в списке)


Если "есть ли всё для того что бы союз между" - вернётся запись, иначе нет.
...
Рейтинг: 0 / 0
Помогите решить задачу
    #39224093
Akina
Код: sql
1.
2.
3.
4.
5.
SELECT 1
FROM `table`
WHERE `member_A` IN (список)
  AND `member_B` IN (тот же список)
HAVING COUNT(DISTINCT (`member_A`, `member_B`)) = fnFactorial(кол. уник. записей в списке)


Если "есть ли всё для того что бы союз между" - вернётся запись, иначе нет.

А если у меня нету списка, у меня есть только участник А. Надо получить "входит ли участник хотя бы в один законченный союз с тремя участниками"?
...
Рейтинг: 0 / 0
Помогите решить задачу
    #39224132
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это совсем другая задача. Придётся перебирать все возможные тройки (оптимизация - из тех, с кем у этого участника двойка).
...
Рейтинг: 0 / 0
Помогите решить задачу
    #39224849
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий shinobisunА если у меня нету списка, у меня есть только участник А. Надо получить "входит ли участник хотя бы в один законченный союз с тремя участниками"?
pour le trois - и даже без поллитры, все равно необходимо прописать все 6 сравнений
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select a.kto, b.kto, c.kto --, a.skem, b.skem, c.skem
from proposal a
join proposal b on a.skem=b.kto
join proposal c on b.skem=c.kto and c.skem=a.kto and с.kto>b.kto
where a.kto='A' -- a.kto<b.kto
  and exists(select * from proposal where kto=a.kto and skem=c.kto)
  and exists(select * from proposal where kto=b.kto and skem=a.kto)
  and exists(select * from proposal where kto=c.kto and skem=b.kto)


pour quatre
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
select a.kto, b.kto, c.kto, d.kto
from proposal a
join proposal b on a.skem=b.kto
join proposal c on b.skem=c.kto and c.kto>b.kto
join proposal d on c.skem=d.kto and d.kto>c.kto and d.skem=a.kto
where a.kto<b.kto --a.kto='A' 
  and exists(select * from proposal where kto=a.kto and skem=c.kto)
  and exists(select * from proposal where kto=a.kto and skem=d.kto)
  and exists(select * from proposal where kto=b.kto and skem=a.kto)
  and exists(select * from proposal where kto=b.kto and skem=d.kto)
  and exists(select * from proposal where kto=c.kto and skem=a.kto)
  and exists(select * from proposal where kto=c.kto and skem=b.kto)
  and exists(select * from proposal where kto=d.kto and skem=b.kto)
  and exists(select * from proposal where kto=d.kto and skem=c.kto)
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите решить задачу
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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