我有两张桌子:
产品:
+-----------+-------------------------+
|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) |
+-----------+-------------------------+--------------------+
仅从颜色中获取第一个(1001)值。是否可以循环播放'颜色并显示每一个?(或由他们分组?[GROUP BY在这里不起作用])
答案 0 :(得分:2)
MySQL CONCAT函数用于连接两个字符串:使用c.id
制作p.colors格式为1001,1002,1003和SELECT p.id as product_id, p.colors, c.id, c.color_rgb
FROM products p
INNER JOIN colors c ON (CONCAT(',', p.colors, ',') LIKE CONCAT('%,', c.id, ',%'))
ORDER BY p.id, c.id ASC
p.colors
例如:,1001,1002,1003,(产品)%,1001,%(颜色)
{{1}}
答案 1 :(得分:1)
如果我没有犯错,这应该可以胜任
如果您想与字符串中的任何颜色匹配,可以使用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)
我认为这应该有效,但目前还不能自己测试。