0

我在数据库中有两个表parts, 和products。我在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
--------------------------------
1   |  1,2,3
2   |  2,3
3   |  1,2

我真的在为这个 SQL 查询苦苦挣扎。我已经完成了第一部分,从零件表中获得了 id

SELECT * FROM partsWHERE descriptionLIKE '%{$search}%'

最大的问题是描述列的逗号分隔结构。

显然,我可以在 PHP 中做到这一点,从部件表中创建一个结果数组,使用它来搜索产品表中的 id,然后使用这些结果从部件表中获取行数据(再次)。效率不是很高。

我也试过这个,但我显然想在这里比较两个数组,不知道应该怎么做。

SELECT * FROM `products` WHERE 
CONCAT(',', description, ',') 
IN (SELECT `id` FROM `parts` WHERE `description` LIKE '%{$search}%')

有人可以帮忙吗?

4

1 回答 1

0

我也许会尝试LOCATE()和的组合SUBSTR()。我主要在 MSSQL 中工作CHARINDEX(),我认为它的工作方式类似于 MySQL 的LOCATE(). 一定会很乱。部件列表字段中的元素数量是否可变?

于 2013-06-23T06:25:13.583 回答