php - 连接具有不同列值的行

标签 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_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';

现在根据用户过滤输入,我想为其选择正确的位置。 但是因为我用 LEFT JOIN 加入了所有东西,所以我得到了不同行上的所有筛选项,见图。

enter image description here

所以我想选择一个位置,其中 location_id 同时具有 filter_key FILTER_GRASS 和 FILTER_PARKING。

如果我使用“AND f.filter_key = 'FILTER_PARKING' AND f.filter_key = 'FILTER_GRASS'”,它将不起作用,因为过滤器值位于单独的行上。

有人知道选择 location_id 具有两个 filter_key 的位置的线索吗?

最佳答案

您需要使用 Group ByHaving 来过滤位置。

尝试:

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'
GROUP BY l.location_id 
HAVING SUM(f.filter_key = 'FILTER_PARKING') AND 
       SUM(f.filter_key = 'FILTER_GRASS')

关于php - 连接具有不同列值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52813109/

相关文章:

sql - 自助加入获取员工经理姓名

php - 坚持在 MySQL 上使用 HAVING

php - 更改提交按钮的图像

java - 做一个运行代码的网站

mysql - Rails 3.1 破坏了 MySql::Time 的排序

SQL查询某个日期范围内匹配日期的记录数?

php - 建立评级系统 : database structure involve user_id?

php - 存储用户在文本中输入的超链接

jquery - 来自 SQL 的 ColdFusion ValueList

mysql - SQL删除基于来自同一个表的查询的行?