gpt4 book ai didi

mysql - 您将如何缩短此查询?

转载 作者:行者123 更新时间:2023-11-30 00:53:44 25 4
gpt4 key购买 nike

我知道这有点具体,但我不知道如何让它变得更简单。它涉及多个联接和多个表。这给出了期望的结果,但是很难看。

这是我所拥有的。必须有一种比所有这些联接更好的方法,尤其是同一个表的多个联接,但是所有其他变体都需要很长时间才能产生相同的结果。

SET @SEARCH:="toxic +crystal";
SELECT i.itemName item, id1.preview, it.isIngredient, it.hasRecipe, i2.itemName ingredient, id2.preview, it2.hasRecipe, ri.count AS needed, MATCH(i.itemName) AGAINST(@SEARCH) score
FROM recipe_detail rd
JOIN item_detail id1 ON id1.item_id = rd.output_item_id
JOIN recipe_ingredients ri ON ri.recipe_id = rd.recipe_id
JOIN item_detail id2 ON id2.item_id = ri.item_id
JOIN itemNames i ON i.itemId = id1.item_id
JOIN itemNames i2 ON i2.itemId = id2.item_id
JOIN items it ON it.item_id = i.itemId
JOIN items it2 ON it2.item_id = ri.item_id
WHERE MATCH(i.itemName) AGAINST(@SEARCH)
ORDER BY score DESC, id1.item_id;

如果需要更多详细信息,请询问。

通过丑陋,我或多或少意味着简化,因为我试图将这个查询扩展为“递归”以找到整个成分链(以及所需的数量,但这是另一个问题)。我宁愿在一个查询中将其关闭,因为通过 php 脚本执行它似乎也花费了太长时间。只是尝试优化它。

我可以省略 itemNames 连接,并使用另一个查询从脚本中执行此操作,但我试图弄清楚如何一次性完成这一切。我开始认为这是不可能的。

(省略一些不相关的字段)
示例数据项目:

item_id |  hasRecipe  |   isIngredient
--------------------------------------
1 N Y
2 N Y
3 Y Y
4 Y N

食谱成分:

recipe_id |  item_id  |  count
------------------------------
1 2 2
1 3 1
2 1 4

食谱详细信息:

recipe_id | output_item_id
--------------------------
1 4

这样做的最终目标是允许某人选择一个项目,并获得创建该项目所需的所有内容的分层显示,这就是为什么我试图精简内容以可能使用递归( @var 方法我猜)查询以一次性拉取它然后解析它。最长的结果可能需要 10 或 12 步以上才能到达。

最佳答案

您始终可以使用 View 。

CREATE VIEW view_name_goes_here AS 
SELECT i.itemName item, id1.preview, it.isIngredient, it.hasRecipe, i2.itemName ingredient, id2.preview, it2.hasRecipe, ri.count AS needed, MATCH(i.itemName) AGAINST(@SEARCH) score
FROM recipe_detail rd
JOIN item_detail id1 ON id1.item_id = rd.output_item_id
JOIN recipe_ingredients ri ON ri.recipe_id = rd.recipe_id
JOIN item_detail id2 ON id2.item_id = ri.item_id
JOIN itemNames i ON i.itemId = id1.item_id
JOIN itemNames i2 ON i2.itemId = id2.item_id
JOIN items it ON it.item_id = i.itemId
JOIN items it2 ON it2.item_id = ri.item_id

然后您只需在 View 中进行选择即可。

关于mysql - 您将如何缩短此查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20756874/

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