Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 以多个单元格值(跨行)作为条件的复杂查询?_Php_Mysql_Sql_Database_Datastore - Fatal编程技术网

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

Php 以多个单元格值(跨行)作为条件的复杂查询?,php,mysql,sql,database,datastore,Php,Mysql,Sql,Database,Datastore,1.)我想查询,哪些fk_路径ID包含所有3个fk_链接ID(101,51,87)。在本例中,结果将是路径id 2和路径id 3。 2.)我想查询,哪些fk_路径ID按升序包含所有3个fk_链接ID(101,51,87)。在本例中,结果将是路径id 3。 查询应该可以使用任意数量的fk_链接ID,这样我就可以获得数千个fk_链接ID的父fk_路径ID MySql甚至可以做到这一点吗?如果不是,是否有其他形式的php兼容数据存储,我可以在其中进行此类查询 数据的简化版本: fk_link |

1.)我想查询,哪些fk_路径ID包含所有3个fk_链接ID(101,51,87)。在本例中,结果将是路径id 2和路径id 3。

2.)我想查询,哪些fk_路径ID按升序包含所有3个fk_链接ID(101,51,87)。在本例中,结果将是路径id 3。

查询应该可以使用任意数量的fk_链接ID,这样我就可以获得数千个fk_链接ID的父fk_路径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_链接的
fk_路径
,请使用:

select
    fk_pathway
from your_table
group by
    fk_pathway
where fk_link in (101,51,87)
having count(distinct fk_link) = 3
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
如果要获得最高的
fk_路径
,该路径包含所有三个
fk_链接
s,请使用:

select
    fk_pathway
from your_table
group by
    fk_pathway
where fk_link in (101,51,87)
having count(distinct fk_link) = 3
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

如果您想获得包含所有三个
fk_链接的
fk_路径
,请使用:

select
    fk_pathway
from your_table
group by
    fk_pathway
where fk_link in (101,51,87)
having count(distinct fk_link) = 3
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
如果要获得最高的
fk_路径
,该路径包含所有三个
fk_链接
s,请使用:

select
    fk_pathway
from your_table
group by
    fk_pathway
where fk_link in (101,51,87)
having count(distinct fk_link) = 3
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回答

对于第二部分,您还需要检查fk_通路的101阶<51阶<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)
选择fk_路径
从你的桌子上
fk_通路分组
具有计数(当fk_链接在(101,51,87)中时的不同情况,然后fk_链接结束)=3
和max(当fk_link=101时,订单结束)
第一部分已由GurV回答

对于第二部分,您还需要检查fk_通路的101阶<51阶<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)
选择fk_路径
从你的桌子上
fk_通路分组
具有计数(当fk_链接在(101,51,87)中时的不同情况,然后fk_链接结束)=3
和max(当fk_link=101时,订单结束)
您是否尝试过…?如果您有多个问题,应分别发布。如果您尝试过…?如果您有多个问题,应分别发布。