gpt4 book ai didi

php - MySQL 查询问题(重复结果)

转载 作者:行者123 更新时间:2023-11-29 01:04:57 24 4
gpt4 key购买 nike

我在 mysql 数据库(鸡尾酒配方网站)中查找重复结果时遇到问题。这里的设置:

表 1:“鸡尾酒”
[cid,c_name](cid = 独特的鸡尾酒 ID,c_name = 鸡尾酒名称)

表 2:“成分”:
[iid,i_name](iid = 唯一成分 id,i_name = 成分名称)

表 3:'cocktail_ingredients'(链接表)
[ciid,cid,iid](ciid = 唯一行标识符,cid = 鸡尾酒 cid,iid = 成分 iid)

因此,一种鸡尾酒在“cocktail_ingredients”表中可以有多行(1 到多)。

设置没问题。我现在遇到的问题是查找我的数据库中是否有重复的鸡尾酒。

例如,如果 cocktail_ingredients 表有这些条目:

西德 |独立标识符
1 | 56
1 | 78
1 | 101
...
9 | 56
9 | 78
9 | 101

鸡尾酒是一样的(无论如何出于理论目的)。

如果 'cocktail_ingredients' 表多了一行......

9 | 103

那么它就不一样了,因为 9 号鸡尾酒包含了一种额外的成分。

所以 mysql 必须做 2 个检查,首先成分计数是否相同,其次每个成分 id (iid) 对于相应的鸡尾酒 (cid) 是否相同。

我被这个难住了,非常感谢任何帮助。我在想我可能还必须沿着 PHP 路线走下去才能编写更复杂的代码,但我也在这方面苦苦挣扎,所以我认为这是一个停下来询问的好地方。

非常感谢

尼克

最佳答案

您可能还记得以前上过的数学课,集合相等的定义是 A abd B 都是彼此的子集(非严格的),因此只需创建一个 View 或过程来检查 A 中的每个薄是否是同样在 B 中,然后检查两种鸡尾酒是否是彼此的子集。这远非完整的答案,但可能足以让您继续前进;)

做否定可能会更容易 - 在 A 中找到 B 中不存在的成分。不存在,那么 A 必须是 B 的严格子集(假设 A 和 B 不能都为空)

或者对 A 中的每种成分、B 中的每种成分 ionic 以及 A 和 B 中的每种成分进行计数,然后如果它们相等,则它们是等效的鸡尾酒

CREATE VIEW ingredient_count AS
SELECT cid, count(*) as ingredients
FROM cocktail_ingredients
GROUP BY cid

CREATE VIEW shared_ingredients AS
SELECT c1.cid cid1, c2.cid cid2, count(*) as ingredients
FROM cocktail_ingredients as c1 INNER JOIN cocktail_ingredients as c2
ON (c1.cid != c2.cid AND c1.iid = c2.iid)
GROUP BY c1.cid,c2.cid

CREATE VIEW duplicates AS
SELECT cid1,cid2
FROM (ingredient_count AS ic1 INNER JOIN shared_ingredients
ON ic1.cid=cid1) INNER JOIN ingredient_count as ic2
ON ic2.cid=cid2
WHERE ic1.ingredients=ic2.ingredients
AND shared_ingredients=ic1.ingredients

请注意,这在 mysql 中使用带有合理 where 子句而不是 View 的子选择可能要快得多,但这更容易理解

关于php - MySQL 查询问题(重复结果),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4668859/

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