gpt4 book ai didi

mysql - 仅使用给定的关键字进行搜索,仅此而已

转载 作者:行者123 更新时间:2023-11-30 00:47:17 27 4
gpt4 key购买 nike

我需要建立一个MySQL数据库系统,用于搜索我们可以用我们现有的 Material 制作的产品。

到目前为止,我对数据库结构有了一个想法,但我无法编写查询来准确选择我想要的内容。

产品表

+-------+-------------+
| id | product |
+-------+-------------+
| 1 | product1 |
+-------+-------------+
| 2 | product2 |
+-------+-------------+
| 3 | product3 |
+-------+-------------+
| 4 | product4 |
+-------+-------------+

Material 表

+-------+--------------+
| id | material |
+-------+--------------+
| 1 | material1 |
+-------+--------------+
| 2 | material2 |
+-------+--------------+
| 3 | material3 |
+-------+--------------+
| 4 | material4 |
+-------+--------------+
| 5 | material5 |
+-------+--------------+
| 6 | material6 |
+-------+--------------+

产品 Material 需求表(多对多)

+-------+-------------+-------------+
| id | productid | materialid |
+-------+-------------+-------------+
| 1 | 1 | 1 |
+-------+-------------+-------------+
| 2 | 1 | 2 |
+-------+-------------+-------------+
| 3 | 1 | 3 |
+-------+-------------+-------------+
| 4 | 1 | 4 |
+-------+-------------+-------------+
| 5 | 2 | 1 |
+-------+-------------+-------------+
| 6 | 2 | 2 |
+-------+-------------+-------------+
| 7 | 2 | 3 |
+-------+-------------+-------------+
| 8 | 3 | 3 |
+-------+-------------+-------------+
| 9 | 3 | 4 |
+-------+-------------+-------------+
| 10 | 3 | 5 |
+-------+-------------+-------------+
| 11 | 4 | 5 |
+-------+-------------+-------------+
| 12 | 4 | 6 |
+-------+-------------+-------------+

由于库存控制等进一步改进, Material 表需要单独。这些只是数据库结构的示例。有了这些表格和数据,系统需要执行搜索。而真正的数据库将会更加复杂和拥挤。

搜索示例;

+----------------------------------------------+--------------------------+
| search | result |
+----------------------------------------------+--------------------------+
| material1, material2, material3, material4 | product1, product2 |
+----------------------------------------------+--------------------------+
| material1, material2, material3 | product2 |
+----------------------------------------------+--------------------------+
| material3, material4, material5, material6 | product3, product4 |
+----------------------------------------------+--------------------------+
| material5, material6 | product4 |
+----------------------------------------------+--------------------------+
| material2, material3, material4, material5 | product3 |
+----------------------------------------------+--------------------------+
| material1, material2, material3 | product2 |
+----------------------------------------------+--------------------------+
| material4, material5, material6 | product4 |
+----------------------------------------------+--------------------------+
| material1, material2 | - |
+----------------------------------------------+--------------------------+

换句话来说,搜索必须根据我们输入的 Material 名称给出带有产品名称的结果。目的是帮助我们决定如何利用我们拥有的 Material 和知识。

如果您有执行此类搜索的想法,请提前致谢。我对任何想法都持开放态度,包括数据库结构的改变。我只需要一个查询即可处理。我不仅需要您的想法来解决问题,还需要您的解释来理解。

无论如何,谢谢。

最佳答案

这是“集合内集合”查询的示例。回答这个问题最灵活的方法是使用带有 having 子句的聚合:

select p.*
from TableOfMaterialNeeds tomn join
Products p
on tomn.productid = p.productid join
TableOfMaterials tom
on tomn.materialid = tom.materialid
group by p.productid
having sum(find_in_set(tomn.material, @LISTOFMATERIALS) = 0) = 0;

假设变量@LISTOFMATERIALS具有 Material 列表(例如'material1,material2,...',逗号后没有空格)。

仅当 Material 不在集合中时,find_in_set() 才返回 0sum() 计算 Material 的数量,= 0 表示没有。

关于mysql - 仅使用给定的关键字进行搜索,仅此而已,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21260608/

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