Symfony2 MySQL:INSERT SELECT语法错误

时间:2016-01-08 11:47:49

标签: php mysql symfony doctrine-orm

我在编写正确的MySql查询时遇到问题。我想为id大于1000但小于10000的每个用户插入新的集合。

$conn = $this->em->getConnection();

$stmt = $conn->prepare('INSERT INTO collection (name, type) 
                   values(:name, :type) 
                   SELECT  * FROM user WHERE id<:endUser AND id>:startUser');
$stmt->bindValue('name', 'Default');
$stmt->bindValue('type', 0);
$stmt->bindValue('startUser', 1000);
$stmt->bindValue('endUser', 10000);
$stmt->execute();

这是我试着写的,但是我得到了语法错误。请解释我如何纠正查询

UPD

我应该给出详细的表格结构。

集合

  CREATE TABLE IF NOT EXISTS `collection` (
         `id` int(11) NOT NULL AUTO_INCREMENT,
         `user_id` int(11) NOT NULL,
         `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
         `type` smallint(6) NOT NULL,
          PRIMARY KEY (`id`),
          KEY `IDX_FC4D6532A76ED395` (`user_id`)
          );

用户

   CREATE TABLE IF NOT EXISTS `user` (
         `id` int(11) NOT NULL AUTO_INCREMENT,
         `username` varchar(255) NOT NULL,
          PRIMARY KEY (`id`)
          );

用户与Collection有一对多的关系。

1 个答案:

答案 0 :(得分:2)

使用SELECT INTO,您必须选择要在新行中放置的值,并且只选择那些值。你不要使用VALUES()子句。

当您对新行使用静态值而不是user表中的值时,您可以这样做。

哦,我在你的编辑中看到你使用了错误的表格名称它应该是fos_user

此外,由于fos_user.user_id是NOT NULL字段,您需要在插入字段列表中包含该列。

$conn = $this->em->getConnection();

$stmt = $conn->prepare('INSERT INTO collection (user_id, name, type) 
                              SELECT id, 'default', 0
                              FROM fos_user
                              WHERE id > :startUser AND id < :endUser');

$stmt->bindValue('startUser', 1000);
$stmt->bindValue('endUser', 10000);
$stmt->execute();