2014-10-20 47 views
0

我试图从一个表复制到另一个表,它工作正常,但我也需要插入当前用户ID在新表中。我还没有想出如何。通常我会做类似SET user_id = :user_id,但我从来没有使用过这个。从一个MySQL表复制到另一个问题

这是我的代码:

$q = $conn->prepare("INSERT INTO user_themes(title,code_entry,code_home,code_css,code_category,code_archive) 
    SELECT title, code_entry, code_home, code_css, code_category, code_archive FROM blogy_themes WHERE id = :id"); 

所以我的问题是: 我如何可以插入user_id(假设user_id是1)到新表中呢?

+0

添加一列并插入它 - 你没有试过吗? – 2014-10-20 18:36:00

+0

@JayBlanchard我已经在数据库中添加了列(user_id),但无法弄清楚如何在查询中实现它。 – kanarifugl 2014-10-20 18:38:05

+0

只需添加新列user_id并将其插入即可。请注意,不要将自动增量设置为该字段。 – 2014-10-20 18:41:17

回答

1

查询的基础不会改变。只需将值添加到两列和`SELECT语句:

INSERT INTO user_themes(user_id, title,code_entry,code_home,code_css,code_category,code_archive) 
    SELECT :user_id, title, code_entry, code_home, code_css, code_category, code_archive 
    FROM blogy_themes WHERE id = :id 

然后,当你执行,既绑定和:id:user_id

0

从我知道你想有一个正在做的动作在所有的新记录用户的ID,你可以这样做:

$q = $conn->prepare("INSERT INTO user_themes(user_id,title,code_entry,code_home,code_css,code_category,code_archive) 
SELECT '" . (int) $userid ."' as user_id, title, code_entry, code_home, code_css, code_category, code_archive FROM blogy_themes WHERE id = :id"); 

这是一种变通方法,以保持按原样使用查询。 第二种选择是更多的“ORM”方法,您可以查询user_themes表中的所有相关记录,迭代结果集,克隆每一行并将其保存为新的user_id。

+1

是的。它的工作,但不得不删除“as”,并用逗号代替它。 – kanarifugl 2014-10-20 18:56:09

+0

['如果它工作...'](http://meta.stackexchange.com/a/5235/)@kanarifugl – 2014-10-20 19:20:23

+0

你为什么拿一些占位符,然后去破坏它? – tadman 2014-10-20 19:31:20

相关问题