我正在努力理解一个php / mysql应用程序的自定义架构可以在SELECT查询中组合,但我不熟悉这种关系。我是一名新手程序员,缺乏描述这种关系的能力,以便在网上找到具体的信息。我正在寻找一些伪代码或技术术语来设计这个模式。
它很简单,可以在下面看到。我也尝试过将SQL命令作为伪代码通知的逻辑,这就是我解码的地方我不得不寻求帮助(9_9)
这是使用两个表的分类模式。第一个表包含术语和基于权重的顺序(从最低到最高)值。第二个表指定第一个表的父子关系。有趣的是,第一个表中的子权重类似于多维数组的第二个值,其中父 m 权重索引子权重 n 。像taxonomy_term_weight [ m ] [ n ]
之类的东西table_a table_b on table_a.ID
+-----+------+-----+...+-----+
| ID | TRM | WT |...| P |
+-----+------+-----+...+-----+
|1 | 3 | [9] |...| [0] |
|2 | 1.1 | [0] |...| [9] |
|3 | 2 | [8] |...| [0] |
|4 | 2.1 | [0] |...| [3] |
|5 | 2.2 | [1] |...| [3] |
|9 | 1 | [5] |...| [0] |
+-----+------+-----+...+-----+
table_a = term table,
table_b = hierarchy table
TRM= TERM, WT= WEIGHT, P=PARENT
我尝试伪代码。从逻辑上讲,要获得第一个项目,我们需要找到P = 0的记录(意味着它没有父项,并且在此方案中本身就是父项)并且其权重值应该是最低的(意味着它是第一项)。伪代码中有这样的东西,
table_a.ID=table_b.P=0 AND table_a.WT=[lowest value] //e.g. P=0, WT=5, Therefore ID=9;
结果ID是用于查找子记录的父ID,
table_a.ID=table_b.P AND table_a.WT[lowest value] //e.g. P=9, WT=0, Therefore ID=2;
接着,
table_a.ID=table_b.P AND table_a.WT=[lowest value] //e.g. P=2, WT=0, Therefore ID=none;
但我想要的是同一个父母,体重递增,
P=9, WT=1, Therefore ID=none;
我理解将表格串在一起,但这似乎是ziz-zag或oscilate。我很快意识到有一个我不理解的深度复杂性。
答案 0 :(得分:0)
不确定你的意思是“最后增加重量”位(从什么/哪里增加?) - 但这可能很容易添加到下面...所以,在顶部我的头,并假设一个单一的查询是没有任何函数/ sprocs或专用视图,然后像这样:
[注意:这是手写的,可能需要一些剪裁,拼写检查和非常喜欢的显示 - 它也是在asni sql中使它与数据库无关(在某种程度上)] 强>
select ID3 from
(
select id as id1, min(wt) as w1 from table_a A1 Inner join table_b B1 on A1.id = B1.p
where p=0
) Q1
inner join
(
select id as id2, min(wt) as w2 from table_a A2 Inner join table_b B2 on A2.id = B2.p
) Q2
on Q1.id1 = Q2.id2
inner join
(
select id as id3, min(wt) as w3 from table_a A3 Inner join table_b B3 on A3.id = B3.p
) Q3
on Q3.id3 = Q1.id1
编辑:为了清晰起见而添加... 我对这个问题的理解是这样的。从示例中,我们将P值设为零(这可能是最终解决方案中的变量)。此问题(block1)连接2个表a和b并返回ID(2)。这需要传回同一个查询(将P = 0替换为P = 2,再次匹配表a中的ID)。
此时该示例给出了当前返回的ID(5),但实际上想要使用块1中的ID(p = 9),因此这里的第三个块与P上的第一个查询连接(输出为as) ID1)。
这意味着根本没有使用第二个块(Q2)的输出,因此我对它的评论如上。
很明显,所有这一切都是使用表a和表b之间的连接作为其fromlef中的虚拟表。这可以通过使查询更简单(至少更容易阅读)的视图来实现。
如果这不是实际需要的,那么我需要更好地解释在给定示例中如何进行交互所需的步骤(所需的内容,而不是解决方案中的当前内容)。我没有预见到这里的问题,在单个查询中数据库级别似乎都可行。有些人认为可能需要索引,如果这些表完全相同(这也是视图可以帮助的地方 - 查看索引 - 或使用SPROC和临时表,然后可以将其编入索引)。