小白问题:提交一组数据并插入数据库

#1 prince

脑子突然不转弯了(手册看了也转不了{:soso_e127:}),求思路求解答!!!
表结构:
CREATE TABLE IF NOT EXISTS `mbt_column` (
  `id` int(8) NOT NULL AUTO_INCREMENT,
  `rowType` varchar(1) NOT NULL DEFAULT '0',
  `name` varchar(54) NOT NULL,
  `attachRow` varchar(8) DEFAULT NULL,
  `articleId` int(8) DEFAULT NULL,
  `winer` int(2) NOT NULL DEFAULT '0',
  `PostDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
提交一组articleId上来,如下:
Array(    [0] => 321    [1] => 320 [2] => 319 ......)
插入记录时指定rowType,attachRow为2,5

怎么写的插入记录语句?

2013-07-08 15:16:19

#2 y_e_s_2011@163.

放在循环里面一条条插入啊

2013-07-08 20:25:34

#3 jake

用foreach + create

2013-07-09 08:55:40

#4 prince

我再找找别的方法,找到再来分享

2013-07-09 10:45:53

#5 蓝色天擎

循环不就行了吗, 还要找啥方法?
$ids = $this->spArgs("ids");
for($i=0;$i          $values = array(
            'id' => $ids [$i],
            'rowType' =>2,
            'attachRow' => 5,
          );
          $Obj->create($values);
}

2013-07-09 11:10:42

#6 prince

我现在用的方法是把提交上来的数组处理成字符串,变成这样(3),(4),(5)
然后组装一句mysql语句:
INSERT INTO mbt_column(articleId) value ('321'),('320') ON DUPLICATE KEY UPDATE `rowType`=2, `attachRow`=6
执行后,前半部分是生效了,但是
ON DUPLICATE KEY UPDATE `rowType`=2, `attachRow`=6
这部分没有生效,新插入的记录rowTyp,attachRow都是默认值,不是我指定的值

2013-07-09 12:16:40

#7 大腰怪

你拼接一个insert语句的字符串看看可以么。

2013-07-09 12:45:09

#8 prince

大腰怪 发表于 2013-7-9 12:45
你拼接一个insert语句的字符串看看可以么。
那个articleId长度不是固定的,所以拼接不方便,如果不考虑数据库写优化的话我早用foreach了

2013-07-09 12:50:18

#9 蓝色天擎

INSERT INTO mbt_column(articleId,rowType,attachRow) values (321,2,6),(320,2,6) ON DUPLICATE KEY UPDATE `rowType`=2, `attachRow`=6

2013-07-09 12:59:17

#10 prince

大腰怪 发表于 2013-7-9 12:45
你拼接一个insert语句的字符串看看可以么。
参考了你的,把字段rowType和attachRow的值也拼进去了,把后半句ON去掉,之前是ON DUPLICATE KEY UPDATE 理解错了。
幻の羽翼
ON DUPLICATE KEY UPDATE 表示主键冲突的时候才update
确切的说是 唯一性冲突



谢谢各位帮忙,结帖

2013-07-09 13:11:11

#11 prince

foreach( $ids as $key ){
                $idsvalue .= '(\'2\', '.  $pClass . ',\'' . $key . '\'),';
        }
        $idsvalue = trim($idsvalue,',');
        $sqlStr = "INSERT INTO mbt_column(`rowType`,`attachRow`,`articleId`) value " . $idsvalue ;
        $obj_addCol -> runSql($sqlStr);
完整代码

2013-07-09 13:15:07

#12 蓝色天擎

前面以为你的articleId 是主键。。。。  还是用循环判断吧

2013-07-09 13:46:05