许多类别的一种产品-PHP MySQL

bik*_*y77 3 php mysql

我有一张桌子products(id,条形码,catid,名称,描述等),并被要求将某些产品分配到多个类别中成为可能。最明显的解决方案是将Catid从INT更改为带有定界值的VARCHAR,即1,2,5,其中1,2和5是各种类别。

现在,哪个SQL语句将为我完成工作?我想到的是find_in_set,但我认为相反。

Kil*_*one 5

最明显的解决方案是创建一个“跨表”,您可以在其中进行多对多分配(因为在一个类别中可以有许多产品,而一个产品可以有许多类别)。该表如下所示:

product_id | category_id
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用以下查询:

SELECT 
  *
FROM 
  (product JOIN product_has_category ON product.id = product_has_category.product_id) 
      JOIN category ON product_has_category.category_id = category.id
Run Code Online (Sandbox Code Playgroud)

您甚至可以使用normal WHERE和`ORDER BY等。

编辑:修复了我的查询,我的应用中的重大错误!


如果无法更改数据库,则可能需要尝试以下操作:

SELECT 
  *
FROM 
  category, product
WHERE
  product.id = ?? AND FIND_IN_SET(category.id, product.catid) > 0 GROUP BY product.id
Run Code Online (Sandbox Code Playgroud)

警告:这是一个长镜头,我还没有测试过,但是由于FIND_IN_SET会搜索以逗号分隔的列表,因此可以使用。