gpt4 book ai didi

php - 检查多行并返回是否全部匹配

转载 作者:行者123 更新时间:2023-11-30 23:04:34 26 4
gpt4 key购买 nike

我有两个这样的表:

产品:

id  name       description
1 book book desc
2 tea tea desc
3 glasses glasses desc

产品属性

product_id    attribute_id
1 2
2 7
2 8
3 2
3 7
3 9
3 10
1 2
1 5
1 7

我还有两个名为 $pid 的变量,它保存产品 ID,值为 2,3,1$search_ids保存属性 ID 并且值为 7,8

我希望仅当来自 product_id 的一个 ID 位于包含来自 $search_ids 的所有值的行中时才返回结果

在这种特定情况下,我希望它只返回 tea ,因为只有 tea 的 id 在行中,所有值都来自 $search_ids(7 和 8)。

我尝试了以下方法,但它返回了所有 3 种产品,然后又返回了两次茶,所以我得到了 5 个结果。我理解它的逻辑,但不知道如何改变它做我想做的事。

$q = "SELECT p.name FROM products AS p, product_attributes AS pa WHERE p.id = pa.product_id AND pa.product_id IN ($pid) AND pa.attribute_id IN ($search_ids)";

通过上面的查询,我得到以下信息:

Tea
glasses
Book
Tea
Tea

最佳答案

首先,它返回这样的值,因为只要$search_ids 包含任何搜索到的id,它就会给你一个名字。这就是 SQL“IN”的工作原理。

尝试以下(愚蠢且可能不太理想的)解决方案:

辅助变量:

$search_ids_size = count($search_ids);

查询:

SELECT DISTINCT(p.name) FROM products AS p, product_attributes AS pa 
WHERE p.id = pa.product_id
AND p.id IN ($pid)
AND (SELECT count(*) FROM product_attributes WHERE product_id = p.id
AND attribute_id IN ($search_ids)) = $search_ids_size;

我在你的数据集上测试了它并且它有效,尽管可能有更简单的解决方案。

关于php - 检查多行并返回是否全部匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22409551/

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