gpt4 book ai didi

mysql - 如何实现3+条记录之间的交叉引用?

转载 作者:行者123 更新时间:2023-11-29 13:50:24 24 4
gpt4 key购买 nike

我有一个具有这种结构的表

(int)id | (text)title | (text)description | (int)related

以及一个将表与其自身连接起来的查询

SELECT t1.*, t2.title as relatedTitle
FROM mytable t1 LEFT JOIN mytable t2 ON t2.related=t1.id

像这样在一个 SELECT 列表中生成

标题:嗨,描述:非正式问候,另请参阅:你好

当一条新记录存入表中时,只能引用另一条记录

one-way reference

我试图实现的是交叉引用

cross-reference

可以是 2-5 个对象

multi cross-reference

所有对象都应该在每个组合中交叉引用。我想要这个功能:如果设置了相关,脚本应该自动在相关记录中创建交叉引用。如果记录被删除,脚本应更新相关记录中的引用。

对于交叉引用的 3 个以上记录,我正在考虑使用此连接表

(int)id | (int)related

但是 5 个交叉引用对象将有 20 条记录。我还可以创建单列表

(varchar)relatedList

但是如何创建左连接以及如何删除该结构中的关系呢?或者我应该尝试其他方法,如触发器、 View 或临时表?我想避免冗余并使其尽可能简单,但就是无法弄清楚这一点。

最佳答案

如果您的组通常大于 2,那么您应该创建一个组列表 - 如果 A 连接到 B 和 C,则它会形成一个组 A、B、C。

因此,一旦插入关系,您就检查相关项目是否已在组中。如果设置了,则"new"相关条目也在该组中。

如果没有,您刚刚创建了一个包含这两个项目的新组。

因此,如果在您的示例中,“Hi”是单独的,并且“Ho”连接到“Hi”,那么两者都会形成一个新组。当“Ahoi”也连接到“Hi”时,只需复制Hi中的group_id即可。

编辑:根据要求选择的评论:

结构:

table groups: group_id int not null primary key auto_increment, created_tmstmp timestamp
table items: item_id int, group_id int default null

选择:

select * from items i1 
inner join items i2 on i2.item_id != i1.item_id
and i2.group_id = i1.group_id
where i1.id = <given item>.

关系的插入可能会连接到其中一个项目的插入,这取决于线程所有者的场景。如果这两个条目都是新关系,则插入一个新组。

其他问题是:某个项目是否仅属于一组?否则,需要一个 item_group 表来将一个项目连接到多个组。

没有字符串连接,很抱歉可能会被如此残酷地理解。 ;-)

关于mysql - 如何实现3+条记录之间的交叉引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16762310/

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