Php 使用搜索结果(如%search%)匹配数据库中另一个表中的id
数据库中有两个表:零件和产品。 我在products表中有一列,ID字符串以逗号分隔。这些ID与零件表的ID匹配Php 使用搜索结果(如%search%)匹配数据库中另一个表中的id,php,mysql,Php,Mysql,数据库中有两个表:零件和产品。 我在products表中有一列,ID字符串以逗号分隔。这些ID与零件表的ID匹配 **parts** ID | description (I'm searching this part) ------------------------------- 1 | some text here 2 | some different text here 3 | ect... **products** ID | parts-list ----
**parts**
ID | description (I'm searching this part)
-------------------------------
1 | some text here
2 | some different text here
3 | ect...
**products**
ID | parts-list
--------------------------------
1 | 1,2,3
2 | 2,3
3 | 1,2
在这个问题上,我真的很纠结于SQL查询。
我已经完成了第一部分,从零件表中得到了id
从描述为“{$search}%”的部分中选择*
最大的问题是描述列的逗号分隔结构
显然,我可以在PHP中这样做,从parts表中创建一个结果数组,使用该数组搜索products表中的id,然后使用这些结果再次从parts表中获取行数据。效率不高
我也尝试过这个,但我显然在尝试比较两个数组,不确定应该如何做
SELECT * FROM `products` WHERE
CONCAT(',', description, ',')
IN (SELECT `id` FROM `parts` WHERE `description` LIKE '%{$search}%')
有人能帮忙吗?我可能会尝试定位和SUBSTR的组合。我主要在MSSQL中工作,它有CHARINDEX,我认为它的工作原理类似于MySQL的LOCATE。这肯定是一团糟。零件列表字段中是否有数量可变的元素?您应该重构数据库,引入一个名为product\u part的表,该表有两列product\u id,part\u id。并且去掉逗号分隔的字段,因为它效率低下。要补充DevZer0所说的内容,您要查找的术语是多对多或联接表。-这绝对是你想要在这里做的。假设这不是一个选项。每个产品都有多个零件,每个零件与多个产品一起使用,每个零件的数量不同。我能保持这种关系的唯一方法就是使用上面的方法。是的,每种方法都有不同的数量。基本上,结构是这样设置的:零件表保存所有信息,产品表仅用于在显示页面时整理数据。我需要的是一个搜索功能,它将在零件表中搜索匹配的结果,在“零件列表”列中引用具有这些零件的产品,并返回每个产品的行数据。也许可以查看一下。