gpt4 book ai didi

search - 如何构建以下 SELECT 查询

转载 作者:行者123 更新时间:2023-11-29 15:05:36 27 4
gpt4 key购买 nike

希望这里有人能够提供一些mysql建议...

我正在开发一个分类搜索标签系统。我有如下表格:

EXERCISES
exerciseID
exerciseTitle

SEARCHTAGS
searchtagID
parentID ( -> searchtagID)
searchtag

EXERCISESEARCHTAGS
exerciseID (Foreign key -> EXERCISES)
searchtagID (Foreign key -> SEARCHTAGS)

搜索标签可以排列在任意深度的树中。例如,我可能有一棵搜索标签树,如下所示......

Body Parts
Head
Neck
Arm
Shoulder
Elbow
Leg
Hip
Knee
Muscles
Pecs
Biceps
Triceps

现在...

我想选择树的一个分支中的所有搜索标签,这些搜索标签至少引用树的不同分支中的单个搜索标签所引用的记录子集中的一条记录。

例如,假设搜索标签“Arm”指向练习的子集。如果该子集中的任何练习也被搜索标签“肌肉”分支的搜索标签引用,我想为它们进行选择。因此我的查询可能会返回“二头肌”、“三头肌”。

两个问题:

1) 像这样的 SELECT 查询会是什么样子? (如果这样的事情甚至可能不会造成很大的减慢。我不知道从哪里开始......)

2)我应该做些什么来调整我的数据结构,以确保此查询将继续快速运行 - 即使表变大?

预先感谢您的帮助,非常感谢。

最佳答案

一个想法:考虑使用缓存表来保存搜索标签中的所有祖先关系:

CREATE TABLE SEARCHTAGRELATIONS (
parentID INT,
descendantID INT
);

还包括标签本身作为父标签和子标签(因此,对于 id 为 1 的搜索标签,关系表包含一行包含 (1,1) 的行。

这样,您就可以摆脱父/子关系并可以加入平面表。假设“Muscles”的 ID 为 5,

SELECT descendantID FROM SEARCHTAGRELATIONS WHERE parentID=5

返回肌肉中包含的所有搜索标签。

关于search - 如何构建以下 SELECT 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2187129/

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