2013-02-14 118 views
3

以下是我目前正在不过我收到一个MySQL错误:INSERT与两个SELECT语句

mysql_query ("INSERT INTO profile_tag (profile_id, tag_id) 
(SELECT profile_id FROM profile WHERE username = '$username'), 
(SELECT tag_id FROM tag WHERE tag = '$music' OR tag = '$sports' OR tag = '$tech')"); 

我能够完成INSERT使用单一SELECT声明然而,不是两个。

错误我收到:

Query is invalid: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(SELECT tag_id FROM tag WHERE tag = '' OR tag = 'sports' OR tag = '')' at line 1

+2

显示我们的错误可能会有所帮助:-) – 2013-02-14 03:50:40

+2

[**请不要使用新的'mysql_ *'功能代码**](http://bit.ly/phpmsql)。他们不再被维护[并且被正式弃用](http://j.mp/XqV7Lp)。看到[**红框**](http://j.mp/Te9zIL)?学习[*准备的语句*](http://j.mp/T9hLWi),并使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [这篇文章](http://j.mp/QEx8IB)将帮助你决定哪个。如果你选择PDO,[这里是一个很好的教程](http://j.mp/PoWehJ)。 – Eric 2013-02-14 03:51:29

+0

不再推荐使用“mysql”。你应该使用'mysqli_query(...)'http://php.net/manual/en/mysqli.query.php – 2013-02-14 03:51:36

回答

3

很像错误说,语法不正确。插入的值必须与列定义中的值的数量相匹配。

INSERT INTO profile_tag (profile_id, tag_id) 
SELECT 
    profile_id, tag_id 
FROM 
    profile 
    CROSS JOIN tag 
WHERE 
    username = ? 
    AND tag IN (?, ?, ?) 

注意,这将插入行如果tag值,发现每个输入,但我相信这是你想要的。

+0

这几乎完成了这项工作!当第一次运行查询时,它能够正常工作,第二次我在表中的输出不像我预期的那样。配置文件1的标签2和3正确显示。然后当再次运行带有标签1和3的配置文件2时,输出会提供带有标签1,1,3,3的配置文件1,2,1,2? – rp7 2013-02-14 04:14:28

+0

@ user1888378我很难说,除非你给我具体的查询和表格内容 – 2013-02-14 04:15:26

+0

对不起!它确实有效,我的测试导致我不小心保留了用户名,因此弄乱了数字。谢谢! – rp7 2013-02-14 04:25:17

1

您可以使用VALUES条款

insert into profile_tag(user_id, tag_id) values 
((select id from users where username = 'alice'), 
(select id from tags where tag = 'music')); 

http://sqlfiddle.com/#!2/76439/1/0

0
mysql_query ("INSERT INTO profile_tag (profile_id, tag_id) 
(SELECT profile.profile_id, tag.tag_id FROM profile LEFT JOIN tag ON 1 WHERE profile.username = '$username' AND tag.tag IN ('$music', '$sports', '$tech'))");