我有两个表:
产品:
+-----------+-------------------------+
|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/