具有多个单元格值(跨行)的复杂查询作为条件?

时间:2017-02-09 17:31:03

标签: php mysql sql database datastore

1。)我想查询,哪个fk_pathway id包含所有3个fk_link id(101,51,87)。在此示例中,结果将是路径ID 2和路径ID 3。

2。)我想查询,哪个fk_pathway id按升序包含所有3个fk_link id(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

2 个答案:

答案 0 :(得分:1)

如果您想获得包含所有三个fk_pathway的{​​{1}},请使用:

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 的最高fk_pathway,请使用:

fk_link

答案 1 :(得分:1)

第一部分已由GurV回答。

对于第二部分,您还需要检查101的订单是否<订单51 <对于fk_pathway,订单为87。为此,请在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)