我有一个问题要实现这个:
UPDATE users
INNER JOIN relations_colors ON (relations_colors.user_id = users.id)
INNER JOIN colors ON (colors.id = relations_colors.color_id)
SET search_cache = GROUP_CONCAT( colors.name SEPARATOR " ")
phpmyadmin说:"#1111 - 无效使用群组功能",我该如何解决?
答案 0 :(得分:3)
我认为这样的事情会执行您正在寻找的更新操作:
UPDATE users u
JOIN ( SELECT r.user_id
, GROUP_CONCAT(c.name SEPARATOR ' ') AS search_cache
FROM relations_colors r
JOIN colors c ON c.id = r.color_id
GROUP BY r.user_id
) s
ON u.id = s.user_id
SET u.search_cache = s.search_cache
请注意,这只会更新users表中具有relations_colors
/ colors
匹配行的行。
要更新所有用户行,您需要在LEFT
关键字前添加JOIN
关键字才能获得“外部联接”;对于没有任何匹配行的用户,将search_cache列设置为NULL。
为了使结果更具确定性,我们通常在ORDER BY
函数中包含GROUP_CONCAT
子句,例如:
GROUP_CONCAT(c.name SEPARATOR ' ' ORDER BY c.id)