Php 连接具有不同列值的行

Php 连接具有不同列值的行,php,mysql,sql,laravel-5,phpmyadmin,Php,Mysql,Sql,Laravel 5,Phpmyadmin,我正在做一个可以使用过滤器的搜索引擎 我的SQL看起来像这样 SELECT l.location_id, og.*,f.* FROM object_types ot LEFT JOIN object_group_types ogt ON ogt.object_type_id = ot.object_type_id LEFT JOIN object_groups og ON og.object_group_type_id = ogt.object_g

我正在做一个可以使用过滤器的搜索引擎

我的SQL看起来像这样

SELECT l.location_id, og.*,f.*
        FROM object_types ot
        LEFT JOIN object_group_types ogt ON ogt.object_type_id = ot.object_type_id
        LEFT JOIN object_groups og ON og.object_group_type_id = ogt.object_group_type_id
        LEFT JOIN object_groups2filters og2f ON og2f.object_group_id = og.object_group_id
        LEFT JOIN filters f ON f.filter_id = og2f.filter_id
        LEFT JOIN locations l ON l.location_id = og.location_id
        WHERE ot.object_type_key = 'TYPE_TENNIS';
现在根据用户过滤器输入,我想为它选择正确的位置。 但因为我用左连接所有东西,所以我得到了不同行上的所有过滤器项,见图

所以我想选择一个位置,在这个位置上,一个位置id既有filter\u key filter\u GRASS又有filter\u PARKING

如果我使用“AND f.filter\u key='filter\u PARKING'和f.filter\u key='filter\u GRASS'”,它将不起作用,因为过滤器值位于不同的行上


任何人都有线索可以选择位置id同时具有两个筛选键的位置吗?

您需要使用
分组依据
具有
来筛选出位置

尝试:


您可以使用
中的
和条件聚合来尝试下面的方法

    SELECT l.location_id 
    FROM object_types ot
    LEFT JOIN object_group_types ogt ON ogt.object_type_id = ot.object_type_id
    LEFT JOIN object_groups og ON og.object_group_type_id = ogt.object_group_type_id
    LEFT JOIN object_groups2filters og2f ON og2f.object_group_id = og.object_group_id
    LEFT JOIN filters f ON f.filter_id = og2f.filter_id
    LEFT JOIN locations l ON l.location_id = og.location_id
    WHERE ot.object_type_key = 'TYPE_TENNIS'
   and f.filter_key in ('FILTER_PARKING','FILTER_GRAS')
    GROUP BY l.location_id 
    HAVING SUM(case when f.filter_key = 'FILTER_PARKING' then 1 else 0 end)>=1 AND 
           SUM(case whenf.filter_key = 'FILTER_GRAS' then 1 else 0 end)>=1

使用f.filter_键(‘filter_PARKING’、‘filter_GRASS’)谢谢,伙计,这就成功了!非常感谢。这确实奏效了。有一个真正的锻炼计划well@Tycho乐意帮忙:)
    SELECT l.location_id 
    FROM object_types ot
    LEFT JOIN object_group_types ogt ON ogt.object_type_id = ot.object_type_id
    LEFT JOIN object_groups og ON og.object_group_type_id = ogt.object_group_type_id
    LEFT JOIN object_groups2filters og2f ON og2f.object_group_id = og.object_group_id
    LEFT JOIN filters f ON f.filter_id = og2f.filter_id
    LEFT JOIN locations l ON l.location_id = og.location_id
    WHERE ot.object_type_key = 'TYPE_TENNIS'
   and f.filter_key in ('FILTER_PARKING','FILTER_GRAS')
    GROUP BY l.location_id 
    HAVING SUM(case when f.filter_key = 'FILTER_PARKING' then 1 else 0 end)>=1 AND 
           SUM(case whenf.filter_key = 'FILTER_GRAS' then 1 else 0 end)>=1