好吧,无论出于何种原因,我最终遇到的情况是钥匙指向一对多的错误方式。它显然从来没有被用作一对多,只是作为一对一使用,现在需要将其中一个扩展为多个,并且密钥存储的方式结果是向后。
images
表格包含target_id
,target_type
和target_column
三条信息,用于识别任意数量的内容表。 target_type
仅引用与图像关联的内容的表名。 target_column
是用于查找图像的虚拟列(实际上不在内容表中)的名称。这使得任意内容都可以具有多个相关图像,每个图像具有不同的名称。
当您有一段内容并想要查找与特定名称相关联的图像时,您可以执行
select * from images where target_id = content.id
and target_type = "content"
and target_column = "image";
当您引用特定内容时,所有这些信息都可用。
我想要做的是反过来所有这些,以便图像表对引用它的特定内容片段一无所知,而是由每个内容表承担这种负担。
到目前为止,我知道我可以在内容表中添加一列,然后从images表中选择我需要的信息:
select id, target_id from images where target_type = "content";
我想要做的是将其用作子查询并对内容表进行批量更新。这样的事情可能吗?
update content set image_id =
(select id from images where target_type = "content") as image_ids where id =
(select target_id from images where target_type = "content") as content_ids;
我知道这失败了,但我想做一些target_ids的质量分配回到image_ids。这是疯了吗?我该怎么做?
答案 0 :(得分:2)
您可能希望使用Mysql多表更新机制。 (cf http://dev.mysql.com/doc/refman/5.0/en/update.html)
在你的情况下,这将是
update
content,
images
set
content.image_id = images.id
where
images.target_id = content.id
and images.target_type = 'content'
and images.target_column = 'images'
我希望这会对你有所帮助
Jerome Wagner
答案 1 :(得分:1)
您可以加入图片表进行更新:
update content inner join images on images.target_id = content.id and
images.target_type = 'content' and images.target_column = 'images'
set content.image_id = images.id