gpt4 book ai didi

sql - 如何制作SQL多对多同类型关系表

转载 作者:行者123 更新时间:2023-12-03 11:35:00 26 4
gpt4 key购买 nike

我是 SQL 的新手,我在编码时首先尝试尽可能多地学习,这很困难,因为我正在设计我必须忍受一段时间的数据库,所以我想确保我做对了。学习了多对多桥接表的基础知识,但是如果两个字段的类型相同呢?假设一个拥有数千用户的社交网络,您将如何创建一个表格来跟踪谁与谁是 friend ?如果每个关系都有额外的数据怎么办,比如说……“约会 friend ”。知道会有诸如“显示在 dateY 和 dateZ 之间加为好友的 userX 的所有 friend ”之类的查询。我的数据库会有几种这样的情况,我想不出一种有效的方法来做到这一点。由于它对我来说经常出现,我认为其他人已经找到了设计表格的最佳方法,对吗?

最佳答案

创建一个 User表然后一个 Relationships您存储 id 的表两个 friend 的信息以及有关他们关系的任何类型的信息。

SQL图

SQL diagram

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`);

SQL选择

用数据填充表后,您可以创建 SQL 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com