以多个单元格值(跨行)作为条件的复杂查询?
Complicated query with multiple cell values (across rows) as a condition?
1.) 我想查询,哪个fk_pathway ids 包含所有3 fk_link ids (101,51,87)。在此示例中,结果将是路径 ID 2 和路径 ID 3。
2.) 我想查询,哪个fk_pathway ids包含所有3个fk_link ids(101,51,87)按升序排列。在此示例中 结果将是路径 ID 3。
查询应该可以使用任意数量的 fk_link id,这样我就可以获得数千个 fk_link id 的父 fk_pathway id。
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_link
的 fk_pathway
,请使用:
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
,使用:
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)
1.) 我想查询,哪个fk_pathway ids 包含所有3 fk_link ids (101,51,87)。在此示例中,结果将是路径 ID 2 和路径 ID 3。
2.) 我想查询,哪个fk_pathway ids包含所有3个fk_link ids(101,51,87)按升序排列。在此示例中 结果将是路径 ID 3。
查询应该可以使用任意数量的 fk_link id,这样我就可以获得数千个 fk_link id 的父 fk_pathway id。
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_link
的 fk_pathway
,请使用:
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
,使用:
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)