MySQL删除一个人的所有项目而不删除该人的id

时间:2013-10-07 08:40:42

标签: c++ mysql sql

这是第二个问题,因为我正在努力建立this一个。

所以,我想删除一个人的所有项目而不删除该人的id(以便他可以在他选择时再次购买新项目)。

我有这3张桌子:

CREATE TABLE Persons(PersonId INT not null auto_increment primary key);

CREATE TABLE Items(ItemId INT not null primary key);

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 Persons(PersonId),
constraint fk_Item_Id  foreign key (Item_Id) references Items(ItemId));

然后填写表格。

和最后一个表格一样:

INSERT INTO PersonsItems(Person_Id, Item_Id ) VALUES (1,5),(1,8),(1,10)

那么,我进入了人物ID = 1的三​​个项目,ID为5,8和10的项目。

我想要一份声明删除所有人的身份证明为1的项目。然后,该人根本没有任何物品,但如果他愿意将来,他可以再拿一些物品。

mysql_query(connection, \
                   " DELETE * FROM PersonsItems(PersonsItemsId, Person_Id, Item_Id) WHERE PersonId = 1");

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

                   //See remaining rows
                   mysql_query(connection, \
                        "SELECT Person_Id, Item_Id FROM PersonsItems");

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

                   // Fetch single result
           result = mysql_fetch_row(resource);

                   // Display Persons's new items
           while((result = mysql_fetch_row(resource))) {
               printf("%s %s\n",result[0],result[1]);
           }

产生这个

-1 Row(s) Deleted!
1 5
1 8
1 10

mysql> SELECT * FROM PersonsItems;
+----------------+-----------+----------+
| PersonsItemsId | Person_Id | Item_id  |
+----------------+-----------+----------+
|          201   |       1 |        5   |
|          202   |       1 |        8   |
|          203   |       1 |       10   |
+----------------+---------+------------+

所以,它没有删除。我希望删除所有字段,但根本不删除PersonId 1。

这可能发生吗?提前致谢。 PS:我现在已经做了几天了。

2 个答案:

答案 0 :(得分:0)

您的DELETE查询错误,应采用DELETE FROM table_name WHERE some_column = some_value格式(请参阅here)。

所以在你的情况下,它将是:

DELETE FROM PersonsItems WHERE PersonId = 1

更新: 从您的评论中,似乎您希望在查询后让PersonsItems表看起来如下所示:

+----------------+-----------+----------+
| PersonsItemsId | Person_Id | Item_id  |
+----------------+-----------+----------+
|                |       1   |          |
|                |       1   |          |
|                |       1   |          |
+----------------+-----------+----------+

在这种情况下,您应该使用以下查询:

UPDATE PersonsItems SET PersonsItemsId='', Item_id='' WHERE Person_Id='1'

答案 1 :(得分:0)

您需要保留表格中的用户项目。最好创建一个列u_flag默认为0.而删除时只需将标志更改为1.

因此,在选择项目时,请勿使用已删除的值,并且您的用户数据永久保留在表格中。