当前位置: 首页 > 面试题库 >

如何使用mysql数据库创建阻止系统?

裴经义
2023-03-14
问题内容

我创建了一个社交网站,其中包含三个简单的表格,如下所示。

Table User
id (pk)  | user_name
1       | a
2       | b
3       | c

Table Post
id (pk)  | user_id (fk)
1       | 1
2       | 3
3       | 2
4       | 2

Table Block
id (pk) | block_by (fk)  | blocked_to (fk)
1       | 1              | 2

用户可以阻止任何他们想要的人,并且如果发生阻止,两个用户将不再在他们的新供稿中看到彼此的帖子。

在我的表中,这意味着user1并且user2不会看到彼此的帖子,但是“ user3”通常会看到每个人的帖子,因为他不属于该表格块。

    select * from Post p 
where p.user_id not in 
(select b.blocked_to from Block b  
where b.block_by = '$_SESSION[userid]')

从SQL查询中user1无法看到user2的帖子, 但是user2仍然可以看到user1的帖子,
这是我不想要的。我可以针对这种情况的最佳查询是什么?还请考虑我的数据库设计是这条好路吗?您可以建议我,非常感谢:)


问题答案:

我将尝试加入PostBlock表,以过滤出属于其他潜在被阻止用户的给定用户(您通过会话获得)所请求的帖子:

SELECT * FROM Post p INNER JOIN Block b
ON p.user_id = b.blocked_by
WHERE b.blocked_to <> '$_SESSION[userid]'

我还将略微修改您的架构以在表中包括 两个 关系Block

+---------+---------------+-----------------+
| id (pk) | block_by (fk) | blocked_to (fk) |
+---------+---------------+-----------------+
|   1     |      1        |       2         |
|   2     |      2        |       1         |
+---------+---------------+-----------------+

首先,我认为这是代表双向关系的最简单方法。在最坏的情况下,Block表的大小将增加一倍。此外,您不知道将来是否会遇到以块为一种方式的情况。例如,您可以允许用户1阻止用户2,其中用户1仍可以阅读用户2的帖子,反之亦然。



 类似资料:
  • 我正在尝试创建一个spark应用程序,它对创建、读取、写入和更新MySQL数据非常有用。那么,有没有办法使用Spark创建一个MySQL表? 下面是在MySQL数据库中创建表的Scala JDBC代码。我怎样才能通过Spark做到这一点?

  • 在MySQL 中,可以使用 CREATE DATABASE 语句创建数据库,语法格式如下: 中的内容是可选的。语法说明如下: <数据库名>:创建数据库的名称。MySQL 的数据存储区将以目录方式表示 MySQL 数据库,因此数据库名称必须符合操作系统的文件夹命名规则,不能以数字开头,尽量要有实际意义。注意在 MySQL 中不区分大小写。 IF NOT EXISTS:在创建数据库之前进行判断,只有该

  • 问题内容: 作为MySQL的新手,我已经安装了最新版本的MySQL Workbench(5.2.33)。我想知道如何使用此应用程序创建数据库。在SQL编辑器的“概述”选项卡中,几乎没有显示“ MySQL模式”,这些模式是现有数据库吗? 问题答案: 启动MySQL Workbench。 在欢迎窗口的左窗格中,在“打开连接以开始查询”下选择要连接的数据库。 查询窗口将打开。在其左窗格上,有一个标题为“

  • 问题内容: 问题: 是否可以在迁移脚本中创建一个新的数据库,然后连接到它?怎么样? 我的场景: 我正在尝试在Java项目(使用Jersey2.4 + tomcat 7 + PostgreSQL 9.3.1 + EclipseLink的RESTful应用程序)中使用flyway来管理使用git的不同开发人员之间的更改。我写了自己的初始化脚本,并运行了: 而且效果很好。问题是我无法使用脚本创建新的数据

  • 问题内容: 我正在研究自动克隆数据库的Golang脚本。我正在使用go-sql- driver,但是在文档中找不到创建新数据库的方法。与MySQL的连接需要以下URL方案: 但是该数据库尚不存在,我只想连接到服务器,然后创建一个新的数据库。 我怎样才能做到这一点?我必须使用其他驱动程序吗? 问题答案: 您可以完美地使用go-sql-driver。但是,您需要使用具有适当访问权限的mysql用户来创

  • 问题内容: 使用SQLAlchemy,将创建一个Engine对象,如下所示: 如果to参数(在这种情况下为)中指定的数据库不存在,则访问将失败。如果指定的数据库不存在,是否可以告诉SQLAlchemy创建一个新数据库? 问题答案: 在postgres上,通常默认情况下存在三个数据库。如果您能够以超级用户身份(例如,角色)进行连接,则可以连接到或数据库。默认的pg_hba.conf只允许名为unix