提问人:Ahmed Khaldoon 提问时间:11/15/2023 最后编辑:Paul T.Ahmed Khaldoon 更新时间:11/16/2023 访问量:28
多对多重复
Many to Many on duplicate
问:
假设我有具有 {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};
如果我想使外键唯一,我将不能为许多用户提供一个项目,也不能为一个用户拥有许多项目。
我温和地解决了它,我只是检查该项目是否存在,而不是添加数量或插入新的。不,确定是否有更好的方法。
答: 暂无答案
评论