gpt4 book ai didi

Mysql 对多个连接行中的多个字段进行过滤(AND)查询

转载 作者:行者123 更新时间:2023-11-29 22:14:54 28 4
gpt4 key购买 nike

我创建了一个查询,该查询返回产品列表及其字段和值。现在我想在字段中搜索特定值并获取与此搜索查询匹配的结果列表。问题是我想要一个 AND 结构,因此 fieldx 值必须类似于 %car%,而 fieldy 值必须类似于 %chrome%。

这是我的查询和结果集的示例:

查询

SELECT p.id as product,pf.field_name,pfv.field_value
FROM product p
JOIN field pf ON pf.product_id = p.product_id
JOIN field_val pfv ON pfv.field_id = pf.field_id

结果集

product | field_name | field_value
pr1 | meta_title | Example text
pr1 | meta_kw | keyword,keyword1
pr1 | prod_name | Product 1
pr2 ....

因此,考虑到上述查询和结果集,我想要执行以下操作:查询meta_title包含“Example”且prod_name包含“Product”的所有产品。之后,我想对结果进行分组,以便仅返回两个搜索查询匹配的产品。

我尝试了所有我能想到的方法,并且针对相同的问题尝试了许多解决方案,但我认为我的解决方案有所不同,因为我需要对字段名称以及多行上的值进行 AND 匹配。

例如,我尝试将其添加为 WHERE 子句:

WHERE
(field_name = 'meta_title' AND field_value LIKE '%Example%') AND
(field_name = 'prod_name' AND field_value LIKE '%Product%')

显然这不起作用,因为在meta_title 上的第一个where 之后,没有为其他字段名称留下任何结果。但是将 WHERE 更改为 OR 不会给我想要的结果。

我也尝试过 HAVING,但结果似乎相同。

有人知道如何解决这个问题,还是这是不可能的?

最佳答案

一个相对简单的方法是使用group byhaving:

SELECT p.id as product
FROM product p JOIN
field pf
ON pf.product_id = p.product_id JOIN
field_val pfv
ON pfv.field_id = pf.field_id
WHERE (field_name = 'meta_title' AND field_value LIKE '%Example%') OR
(field_name = 'prod_name' AND field_value LIKE '%Product%')
GROUP BY p.id
HAVING COUNT(DISTINCT field_name) = 2;

通过修改HAVING子句(也许还删除WHERE),可以针对不同字段的存在和不存在表达许多不同的逻辑。例如,> 0 将是 OR,而 = 1 将是一个值或另一个值,但不能同时是两者。

关于Mysql 对多个连接行中的多个字段进行过滤(AND)查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31289707/

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