作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 SQL 的新手,我在编码时首先尝试尽可能多地学习,这很困难,因为我正在设计我必须忍受一段时间的数据库,所以我想确保我做对了。学习了多对多桥接表的基础知识,但是如果两个字段的类型相同呢?假设一个拥有数千用户的社交网络,您将如何创建一个表格来跟踪谁与谁是 friend ?如果每个关系都有额外的数据怎么办,比如说……“约会 friend ”。知道会有诸如“显示在 dateY 和 dateZ 之间加为好友的 userX 的所有 friend ”之类的查询。我的数据库会有几种这样的情况,我想不出一种有效的方法来做到这一点。由于它对我来说经常出现,我认为其他人已经找到了设计表格的最佳方法,对吗?
最佳答案
创建一个 User
表然后一个 Relationships
您存储 id
的表两个 friend 的信息以及有关他们关系的任何类型的信息。
SQL图
MySQL代码
CREATE TABLE `Users` (
`id` TINYINT NOT NULL AUTO_INCREMENT DEFAULT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `Relationships` (
`id` TINYINT NOT NULL AUTO_INCREMENT DEFAULT NULL,
`userid` TINYINT NULL DEFAULT NULL,
`friendid` TINYINT NULL DEFAULT NULL,
`friended` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
);
ALTER TABLE `Relationships` ADD FOREIGN KEY (userid) REFERENCES `Users` (`id`);
ALTER TABLE `Relationships` ADD FOREIGN KEY (friendid) REFERENCES `Users` (`id`);
SELECT
查询以获取您所有的 friend 。你的 friend 是那些
id
在一侧,而您的 ID 在另一侧。您检查双方的
id
所以你不需要两次存储关系。您还必须排除您的
id
,因为你不能成为自己的 friend (在一个正常、健康的世界里)。
SELECT *
FROM Users u
INNER JOIN Relationships r ON u.id = r.userid
INNER JOIN Relationships r ON u.id = r.friendid
WHERE
(r.userid = $myid OR r.friendid = $myid)
AND r.friended >= $startdate
AND r.friended <= $enddate
AND u.id != $myid;
$myid
,
$startdate
和
$enddate
可以是 PHP 变量,因此在双引号中,您可以将此代码直接传递到您的数据库。
关于sql - 如何制作SQL多对多同类型关系表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18603372/
假设我有一个 union u,其中有两个相同类型(例如 int)的成员 a 和 b。 union u{ int a,b; char c; }; 如果我写入a,按值将它传递给函数,函数从
我是一名优秀的程序员,十分优秀!