gpt4 book ai didi

mysql - SQL 查询 - 使用不同类型过滤

转载 作者:行者123 更新时间:2023-11-29 10:23:29 25 4
gpt4 key购买 nike

我很难创建我的 sql 查询。如果有人可以帮助我或给我建议。

我有一个包含过滤器数组集合的组:

组:

-------------------------
| id | name |
|------------------------
| 1 | group1 |
|------------------------
| 2 | group2 |
|------------------------
| 3 | group3 |
|------------------------
| 4 | group4 |
|------------------------

过滤器:

------------------------------------
| id | group_id | Type| Value |
|-----------------------------------
| 1 | 1 | 1 | 15 |
|------------------------------------
| 2 | 1 | 2 | 25-34 |
|------------------------------------
| 3 | 1 | 2 | 35-44 |
|------------------------------------
| 4 | 2 | 2 | 25-34 |
|------------------------------------
| 5 | 2 | 2 | 35-44 |
|------------------------------------
| 6 | 3 | 1 | 11 |
|------------------------------------
| 7 | 3 | 1 | 15 |
|------------------------------------

例如,我需要使用这些标准过滤我的组:

filter.type = 1 and filter.value = 11
filter.type = 2 and filter.value in ('25-34','35-44')
filter.group_id = null

结果必须是:

-------------------------
| id | name |
|------------------------
| 2 | group2 |
|------------------------
| 3 | group3 |
|------------------------
| 4 | group4 |
|------------------------

未采用 Group1,因为 type=1 的唯一值不是 11。采用 Group3 是因为当 type=1 时,他有一个值为 11 的结果。

非常感谢您的帮助。

尝试过类似的事情:

SELECT *FROM group c0_
LEFT JOIN group_filter c1_ ON c0_.id = c1_.group_id
WHERE
(
c0_.public = '1' AND c0_.state = '4'
) AND(
(
c1_.id IN(
SELECT
c2_.id
FROM
group c3_,
group_filter c2_
WHERE
(
c2_.id IN(
SELECT
c4_.id
FROM
group c5_,
group_filter c4_
WHERE
c4_.type = 1 AND c4_.value = 11
)
) AND(
(
c2_.type = 2 AND c2_.value IN('18-24', '25-34')
)
)
)
) OR c1_.group_id IS NULL
)
GROUP BY
c0_.id
LIMIT 25 OFFSET 0

最佳答案

select * from t_group INNER JOIN (
SELECT
t_group.id as id ,
GROUP_CONCAT(case
when t_filter.t_type=1 and t_filter.t_value='11' THEN 'A'
when t_filter.t_type=1 and t_filter.t_value<>'11' THEN 'B'
when t_filter.t_type=2 and (t_filter.t_value ='25-34' or t_filter.t_value ='35-44') then 'C'
when t_filter.group_id is null then 'D'
else 'E'
END) str
FROM
t_group
LEFT JOIN t_filter ON t_group.id = t_filter.group_id
GROUP BY
t_group.id) t ON t_group.id=t.id
where (LOCATE('B',t.str)=0 OR LOCATE('A',t.str)>0) AND LOCATE('E',t.str)=0

首先,我查询所有可能的结果,并根据组联系到一个字符串,然后除了我不想要的结果

关于mysql - SQL 查询 - 使用不同类型过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48778503/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com