产品会有很多不同的页面。
产品的数据来自数据库(id,名称,描述......)如果用户喜欢某个产品,他就可以点击一个名为“添加”的按钮,然后按钮就会出现改为“添加”。
用户可以选择在“愿望清单”中添加多个产品。他之前选择的产品将显示为“已添加”。
作为初学者,我知道在添加该产品时,必须有一种方法可以将user_id
与product_id
连在一起。
至于现在,我有products
表。我想我必须创建另一个表格,将user_id
与product_id
保存在一起?
感谢您的想法,希望我能清理自己的想法。
答案 0 :(得分:3)
你走在正确的轨道上。您需要一个表格,将用户与他们选择的产品联系起来:
CREATE TABLE selected_products
(
choice_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
user_id INT NOT NULL,
product_id INT NOT NULL,
FOREIGN KEY (user_id) REFERENCES users (user_id),
FOREIGN KEY (product_id) REFERENCES products (product_id)
) ENGINE=InnoDB;
以这种方式检索用户选择:
SELECT products.product_id, products.description
FROM products JOIN selected_products ON products.product_id = selected_products.product_id
WHERE user_id = '$someuserid';
当用户希望从他的选择中删除产品时,您只需要删除一行:
DELETE FROM selected_products WHERE user_id = '$someuserid' AND product_id = '$product_id';
您的wishlist
表的功能与selected_products
表的功能完全相同。相同的结构,相同的关系。您还可以考虑添加另一列来指示添加产品时的时间戳:
date_added TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
答案 1 :(得分:2)
用户表 - 用户ID(+其他用户信息)
产品表 - 产品(+其他产品信息)
UserFavs表 - UserID,ProdID(+其他“faving”信息,例如日期,参考链接......)
我预计会有其他人 -
UserWishList表 - UserID,ProdID(+其他愿望信息)
UserOwned Table - UserID,ProdID(+其他拥有的信息)
这表明您可以拥有一个将用户与产品相关联并描述该关系的表,例如
UserProduct表 - UserID,ProdID,Relationship(拥有,希望,收藏之一),(+其他关系信息)
使用一个表执行此操作是一种设计选择,应根据系统的使用方式进行选择。如果你的系统与关系有关,那么一个表就有意义了。如果您的系统是关于用户的,并且“列表”是单独的,那么单独的表将更有意义。
答案 2 :(得分:2)
我会这样做:
创建一个名为user_products的表 添加(至少)这些列: id(主键) user_id(用户表的外键) product_id(产品表的外键)
每次喜欢产品时都会在此表格中插入一行。
答案 3 :(得分:2)
id | name | description | ...
id | name | email | ...
id | name | ...
user_id | wishlist_id | product_id
答案 4 :(得分:2)
您应该使用参考表。
确保您为表使用InnoDB,因此您可以使用真正的外键
参考表主要包含引用表的KEYS以及一些相关的元数据。 简单的例子:
CREATE TABLE `stackoverflow`.`users` (
`id` INT NOT NULL AUTO_INCREMENT ,
`username` VARCHAR(45) NOT NULL ,
`fname` VARCHAR(45) NOT NULL ,
`lname` VARCHAR(45) NOT NULL ,
`cdate` DATETIME NULL ,
PRIMARY KEY (`id`) )
ENGINE = InnoDB;
CREATE TABLE `stackoverflow`.`products` (
`id` INT NOT NULL AUTO_INCREMENT ,
`name` VARCHAR(45) NOT NULL ,
`price` INT NOT NULL ,
PRIMARY KEY (`id`) )
ENGINE = InnoDB;
现在带有真实FK的参考表:
CREATE TABLE `stackoverflow`.`user_likes_product` (
`id` INT NOT NULL AUTO_INCREMENT ,
`id_user` INT NOT NULL ,
`id_product` INT NOT NULL ,
`time` DATETIME NOT NULL ,
PRIMARY KEY (`id`) ,
INDEX `fk_user` (`id_user` ASC) ,
INDEX `fk_product` (`id_product` ASC) ,
CONSTRAINT `fk_user`
FOREIGN KEY (`id_user` )
REFERENCES `stackoverflow`.`users` (`id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_product`
FOREIGN KEY (`id_product` )
REFERENCES `stackoverflow`.`products` (`id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
开始使用mysql的另一个建议(如果你在Windows上): 下载并使用Mysql Workbench。
答案 5 :(得分:2)
用户强>
id | ...
<强>收藏强>
id | user_id | ...
<强> Wishlist_Product 强>
wishlist_id | product_id | ...
<强>产品强>
id | ...
这基本上就像亚马逊这样的在线商店。 User
可以拥有多个Wishlists
。 Wishlist
可以包含多个Products
,每个Product
可以包含多个Wishlists
。
如果您希望每Wishlist
只有一个User
,那么您可以更简单:
用户强>
id | ...
<强>希望强>
user_id | product_id | ...
<强>产品强>
id | ...