这是第二个问题,因为我正在努力建立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:我现在已经做了几天了。
答案 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.
因此,在选择项目时,请勿使用已删除的值,并且您的用户数据永久保留在表格中。