多对多重复

Many to Many on duplicate

提问人:Ahmed Khaldoon 提问时间:11/15/2023 最后编辑:Paul T.Ahmed Khaldoon 更新时间:11/16/2023 访问量:28

问:

假设我有具有 {id,name,price}、user{id, name} 的项目表。 我为他们制作了一个篮子表 {id, userID, itemID, quantity}。 问题是当我将 itmeA 添加到 userA 时。用户 B 不能有 itemA。不知道为什么。

但这是我在这里的真实表格。 注意:我在我的项目中使用 phpmyadmin 和 PHP。

CREATE TABLE `User` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `Username` varchar(12) NOT NULL,
  `Email` varchar(26) NOT NULL,
  `Password` varchar(999) NOT NULL,
  PRIMARY KEY (`ID`)
)

CREATE TABLE `Item` (
  `ID` int(255) NOT NULL AUTO_INCREMENT,
  `Name` varchar(255) NOT NULL,
  `Price` float NOT NULL,
  `Allergy` varchar(255) NOT NULL,
  `Image` varchar(20) NOT NULL,
  PRIMARY KEY (`ID`)
)

CREATE TABLE `basket` (
  `Id` int(255) NOT NULL AUTO_INCREMENT,
  `userid` int(255) NOT NULL,
  `itemid` int(255) NOT NULL,
  `quantity` int(255) DEFAULT current_timestamp(),
  PRIMARY KEY (`Id`),
  KEY `itemid` (`itemid`),
  KEY `userid` (`userid`),
  CONSTRAINT `itemid` FOREIGN KEY (`itemid`) REFERENCES `Item` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `userid` FOREIGN KEY (`userid`) REFERENCES `User` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE
)

我的插入篮子表

 $query = "SELECT u.ID as userid, u.Username, i.ID as itemid,
                 i.Name AS itemname, b.quantity, CAST(b.quantity * i.price AS DECIMAL(10, 2)) AS Total
   FROM User u
   JOIN basket b ON u.ID = b.userid
   JOIN Item i ON i.ID = b.itemid
   WHERE u.ID =:userid";

我想做

if (user have this item) {
increase the quantity};
else { 
just insert it to the table with quantity = 1};

如果我想使外键唯一,我将不能为许多用户提供一个项目,也不能为一个用户拥有许多项目。

温和地解决了它,我只是检查该项目是否存在,而不是添加数量或插入新的。不,确定是否有更好的方法。

sql phpmyadmin 外键 对多 唯一

评论

0赞 SmellyCat 11/15/2023
您尚未指定您使用的数据库。无论它是什么数据库,都应该创建一个存储过程来检查现有的 BASKET 记录,然后更新现有记录或添加一个新记录(如果尚不存在)。
0赞 Ahmed Khaldoon 11/22/2023
phpmyadmin 它在标签中-.-

答: 暂无答案