2013-10-02 34 views
0

我正在使用this链接。sql有多个值的列(在cpp文件中查询执行)

我已连接与Eclipse我CPP文件,我用3个表(两个简单的表 PersonItem 和第三个PersonItem连接它们)数据库。在第三个表我用一个简单的初级,然后两个外键这样的:

CREATE TABLE PersonsItems(PersonsItemsId int not null auto_increment primary key, 
Person_Id int not null, 
Item_id int not null, 
constraint fk_Person_id foreign key (Person_Id) references Person(PersonId), 
constraint fk_Item_id foreign key (Item_id) references Items(ItemId)); 

因此,然后在C嵌入式SQL我想一个人有多个项目。

我的代码:

mysql_query(connection, \ 
    "INSERT INTO PersonsItems(PersonsItemsId, Person_Id, Item_id) VALUES (1,1,5), (1,1,8);"); 

    printf("%ld PersonsItems Row(s) Updated!\n", (long) mysql_affected_rows(connection)); 

    //SELECT newly inserted record. 
    mysql_query(connection, \ 
    "SELECT Order_id FROM PersonsItems"); 

    //Resource struct with rows of returned data. 
    resource = mysql_use_result(connection); 

    // Fetch multiple results 
    while((result = mysql_fetch_row(resource))) { 
     printf("%s %s\n",result[0], result[1]); 
    } 

我的结果是

-1 PersonsItems Row(s) Updated! 
5 

VALUES (1,1,5), (1,1,8);

我想这是

-1 PersonsItems Row(s) Updated! 
5 8 

能有人为告诉我为什么这没有发生? 亲切的问候。

回答

1

我怀疑这是因为你的第一个插件,下面的错误失败:

Duplicate entry '1' for key 'PRIMARY' 

因为你试图进入PersonsItemsId是主键,以便必须是唯一的插入1两倍(这是也auto_increment所以没有必要指定一个值);

这就是为什么受影响的行是-1,为什么在这一行:

printf("%s %s\n",result[0], result[1]); 

你只看到5因为第一条语句(1,1,5)已经插入值失败后,所以还是有一个表中的一行数据。

我认为得到您所期望的行为,你需要使用ON DUPLICATE KEY UPDATE语法:

INSERT INTO PersonsItems(PersonsItemsId, Person_Id, order_id) 
VALUES (1,1,5), (1,1,8) 
ON DUPLICATE KEY UPDATE Person_id = VALUES(person_Id), Order_ID = VALUES(Order_ID); 

Example on SQL Fiddle

还是不指定personsItemsID价值,并让AUTO_INCREMENT做它的事:

INSERT INTO PersonsItems(Person_Id, order_id) 
VALUES (1,5), (1,8); 

Example on SQL Fiddle

1

我认为你在你的两个查询中有一个错字或错误。

要插入 “PersonsItemsId,PERSON_ID,ITEM_ID”

INSERT INTO PersonsItems(PersonsItemsId, Person_Id, Item_id) VALUES (1,1,5), (1,1,8) 

,然后你的SELECT语句选择 “ORDER_ID”。

SELECT Order_id FROM PersonsItems 

为了实现5,照你的意见8,你的第二个查询需要是:

SELECT Item_id FROM PersonsItems 

编辑补充:

你的主键是autoincrement所以你不要不需要将它传递给你的插入语句(事实上,当你传递1次时它会出错)。

你只需要插入您的其他列:

INSERT INTO PersonsItems(Person_Id, Item_id) VALUES (1,5), (1,8) 
+0

不,我很抱歉,这不是重要的。我在任何地方都使用Item_id。这是相同的。我很抱歉。编辑。 –