小编Sri*_*apu的帖子

在MySQL表中设置唯一的列对

我正在使用php-MySQL在后端进行项目.它有各种文章可供浏览,分类为各种类别用户登录系统.
我最近添加了一个监视列表功能,使用户可以将文章添加到他们的监视列表/仪表板中.
我有以下表格.

文章
article-id(int)主要 - 唯一
cat(varchar)
名称(varchar)
subCat(varchar)
description(varchar)
添加日期

用户
用户名(varchar)主要唯一
lname
fname
加入日期

.监视列表
article-id(int)
username(varchar)
date_watch

我们可以看到没有用于监视列表表的唯一键
我想要(username + article-id)一个唯一的对因为每个用户名都存在多于1个文章ID而且反之亦然
我只想插入删除行和它并不需要更新他们
如何防止重复条目?
到现在为止我一直用php检查行数

"SELECT * FROM watchlist WHERE article-id={$id} AND username={$user}"
Run Code Online (Sandbox Code Playgroud)

而如果

mysql_num_rows() >1(not allowed to insert) 
Run Code Online (Sandbox Code Playgroud)

这工作正常,但如果错误地执行INSERT命令将是一个重复的条目
如何防止它?
我正在使用phpmyadmin

php mysql

3
推荐指数
1
解决办法
3301
查看次数

数据库设计启用多个标签,如Stackoverflow?

我有以下表格.

文章
a_id INT主要唯一
名称 VARCHAR
描述 VARCHAR
c_id INT

类别
ID INT
cat_name VARCHAR

现在我只是使用

SELECT a_id,name,Description,cat_name FROM Articles LEFT JOIN Category ON Articles.a_id=Category.id WHERE c_id={$id}

这给了我所有属于某个类别的文章以及类别名称.
每篇文章只有一个类别.

我以类似的方式使用子类别(我有另一个名为sub_cat的表).
但是每篇文章都没有必要的子类别.它可能属于多个类别.

我现在想到标记一个包含多个类别的文章就像stackoverflow中的问题被标记一样(例如:有多个标签,如PHP,MYSQL,SQL等).

以后我必须显示(过滤)所有文章与某些标签(例如:标记为php,php + MySQL),我还必须显示标签以及文章名称,描述.
谁能帮我重新设计数据库?(我在后端使用php + MySQL)

mysql database database-design junction-table database-schema

3
推荐指数
1
解决办法
4001
查看次数