1.) Я хочу запросить, какие идентификаторы fk_pathway содержат все 3 идентификатора fk_link (101,51,87). в этом примере Результатом будет идентификатор пути 2 и идентификатор пути 3.
2.) Я хочу запросить, какие идентификаторы fk_pathway содержат все 3 идентификатора fk_link (101,51,87) в порядке возрастания. в этом примере результатом будет идентификатор пути 3.
Запрос должен быть возможен с любым числом идентификаторов fk_link, чтобы я мог получить родительские идентификаторы fk_pathway из тысяч идентификаторов fk_link.
Это возможно даже с MySql? Если это не так, есть ли какая-то другая форма php-совместимого хранилища данных, где я мог бы сделать такие запросы?
Упрощенная версия данных:
fk_link | fk_pathway | order
101 1 1
51 1 2
101 2 1
87 2 2
51 2 3
29 2 4
11 3 1
101 3 2
51 3 3
87 3 4
97 3 5
Если вы хотите получить fk_pathway
которые имеют все три fk_link
s, используйте:
select
fk_pathway
from your_table
group by
fk_pathway
where fk_link in (101,51,87)
having count(distinct fk_link) = 3
Если вы хотите получить наивысший fk_pathway
который имеет все три fk_link
s, используйте:
select
fk_pathway
from your_table
group by
fk_pathway
where fk_link in (101,51,87)
having count(distinct fk_link) = 3
order by fk_pathway desc
limit 1
На первую часть ответил GurV.
Для второй части также необходимо проверить, если порядок 101 < порядка 51 < порядка 87, для fk_pathway. Для этого добавьте условия сравнения в having
пункт.
select fk_pathway
from your_table
group by fk_pathway
having count(distinct case when fk_link in (101,51,87) then fk_link end) = 3
and max(case when fk_link=101 then order end) < max(case when fk_link=51 then order end)
and max(case when fk_link=51 then order end) < max(case when fk_link=87 then order end)