MySQL连接表在列中具有多个值

MySQL连接表在列中具有多个值

我有两个表:

产品:

+-----------+-------------------------+
|product_id |          colors         |
+-----------+-------------------------+
|     1     |      1001,1002,1004     |
+-----------+-------------------------+
|     2     |      1005,1002,1001     |
+-----------+-------------------------+


颜色:

+--------------------+
|  id  |  color_rgb  |
+--------------------+
| 1001 | (24,251,89) |
+--------------------+
| 1002 |  (116,18,1) |
+--------------------+
| 1003 | (221,251,23)|
+--------------------+
| 1004 | (124,251,42)|
+--------------------+


我要做的就是像这样加入两个表:

SELECT *
FROM products
JOIN colors ON (products.colors = colors.id)


但是问题是,它将仅显示类似的内容(假设product_id = 1)

+-----------+-------------------------+--------------------+
|product_id |          colors         |  id  |  color_rgb  |
+-----------+-------------------------+---------------------
|     1     |      1001,1002,1004     | 1001 | (24,251,89) |
+-----------+-------------------------+--------------------+


它仅从颜色中获取first(1001)值。是否可以“循环”通过颜色并显示每种颜色?(或按颜色分组?[GROUP BY在这里不起作用])

最佳答案

如果我没有记错的话,这应该可以完成工作

如果要与字符串中的任何颜色匹配,可以使用LIKE

SELECT *
FROM products
JOIN colors ON (product.colors LIKE CONCAT('%,', colors.id, ',%') OR product.colors LIKE CONCAT(colors.id, ',%') OR product.colors LIKE CONCAT('%,', colors.id) OR product.colors = colors.id)


我认为这应该可行,但目前无法自己进行测试。

关于mysql - MySQL连接表在列中具有多个值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36739814/

10-09 08:34