Сложный запрос с несколькими значениями ячеек (между строками) в качестве условия?

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

0

Решение

Если вы хотите получить fk_pathway которые имеют все три fk_links, используйте:

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_links, используйте:

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
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)
1

По вопросам рекламы [email protected]