我创建了一个社交网站,其中包含三个简单的表格,如下所示。
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的帖子,
这是我不想要的。我可以针对这种情况的最佳查询是什么?还请考虑我的数据库设计是这条好路吗?您可以建议我,非常感谢:)
我将尝试加入Post
和Block
表,以过滤出属于其他潜在被阻止用户的给定用户(您通过会话获得)所请求的帖子:
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