gpt4 book ai didi

php - Mysql:在没有子查询的情况下使用 GROUP_CONCAT 和 FIND_IN_SET

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

您好,我下面有一个简单的示例查询,这不是我在现实中使用的查询,因为它太复杂了,无法在这里解释。基本上,此查询用于 Web 应用程序中的搜索。

由于此查询可能提取的数据量很大,我试图避免使用 HAVING 或子查询,因为它会大大增加检索数据所需的时间。

我想在where子句中使用FIND_IN_SET,但显然GROUP_CONCAT不能在where子句中使用,所以我尝试像下面这样简单的事情,但我不认为变量是在where中设置的并且没有结果被退回。

SELECT 
v.message,
@cat_values:= GROUP_CONCAT(c.category_value) as cat_values
FROM
#Where the audit message is stored
AUDIT_ITEMS AS V
#Link table containing primary key of AUDIT_ITEMS and AUDIT_CATEGORIES
LEFT JOIN AUDIT_ITEM_CATEGORIES AS ic
ON V.UUID = ic.ITEM_UUID
#Gets category uuid from link table above
LEFT JOIN AUDIT_CATEGORIES AS c
ON ic.CATEGORY_UUID = c.UUID
#Gets the category label/type
LEFT JOIN AUDIT_CATEGORY_TYPES AS ct
ON c.CATEGORY_TYPE_UUID = ct.UUID
WHERE TRUE
#example filter used below
AND FIND_IN_SET("Errored", @cat_values) > 0
...etc...

我已经尝试过:

AND FIND_IN_SET("Errored", (SELECT GROUP_CONCAT(c.category_value))) > 0 

但是看起来确实很慢。

还尝试过:

   HAVING FIND_IN_SET("Errored", GROUP_CONCAT(c.category_value)) > 0 

但是一定有一种方法可以根据 group_concat 中的值有效过滤结果吗?

最佳答案

您正在 having 子句中查找条件:

having sum(c.category_value = 'Errored') > 0

这部分逻辑不需要 group_concat()

目前尚不清楚为什么您认为拥有会降低性能。性能损失发生在聚合步骤中——当您在 select 中使用 group_concat() 时,您需要这样做。

关于php - Mysql:在没有子查询的情况下使用 GROUP_CONCAT 和 FIND_IN_SET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28350628/

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