- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
要知道的事情:
问题:
我将如何循环执行此 MySQL 语句? (声明如下)
以下语句现在有效,我还有更多CASE WHEN
来添加它,但现在我正在尝试解决整个事情中最令人困惑的部分。
我需要循环遍历 MySQL 语句(或者找到另一种方法来编写相同的内容),直到到达树的底部。为了说明我正在尝试做的事情:
假设我需要从顶部开始获取整个树的下线。这意味着我必须为下面的每个人运行这个 MySQL 语句。
在我们当前的设置中,我将他们上面的人的 ID
存储在记录中,如下所示,为了沿着记录向下,我必须为其提供上线 ID 并返回所有具有该上线 ID 的记录,该 ID 会返回所有 IMMMEDIATE 下线。
+---------+-------------+------+
| ID | Upline ID | Name |
+---------+-------------+------+
| 745753 | 654-64645-3 | John |
| 098678 | 916-59172-1 | Jill |
| 543272 | 866-99573-8 | Fred |
| 634543 | 126-97939-3 | Dean |
| 923461 | 734-84628-5 | Bill |
| 861345 | 643-01957-0 | Cris |
+---------+-------------+------+
这意味着对于集合中返回的每一行,我必须分别沿着每个记录树跟踪 MySQL 语句,并对返回的每一行执行相同的操作,导致 MySQL 语句成倍增加,直到当我运行该语句时该记录没有返回任何内容,因此我到达了下线的末尾。
不用再等待,这里是语句(我在 WHERE
子句中给它顶部的第一个人的 ID
来启动语句):
SELECT wn_writing_number_cstm.title_c,
wn_writing_number.`name`,
preps_contracted_reps.first_name,
preps_contracted_reps.last_name,
cac_customize_agent_comp_cstm.commission_percentage_c,
wn_writing_number_cstm.id_c
FROM wn_writing_number
LEFT OUTER JOIN wn_writing_number_cac_customize_agent_comp_1_c ON wn_writing_number_cac_customize_agent_comp_1_c.wn_writing946b_number_ida = wn_writing_number.id
LEFT OUTER JOIN cac_customize_agent_comp ON wn_writing_number_cac_customize_agent_comp_1_c.wn_writing3148nt_comp_idb = cac_customize_agent_comp.id
LEFT OUTER JOIN cac_customize_agent_comp_cstm ON cac_customize_agent_comp.id = cac_customize_agent_comp_cstm.id_c
LEFT OUTER JOIN aos_products_cac_customize_agent_comp_1_c ON cac_customize_agent_comp_cstm.id_c = aos_products_cac_customize_agent_comp_1_c.aos_produca2b8nt_comp_idb
LEFT OUTER JOIN preps_contracted_reps_wn_writing_number_1_c ON preps_contracted_reps_wn_writing_number_1_c.preps_contracted_reps_wn_writing_number_1wn_writing_number_idb = wn_writing_number.id
LEFT OUTER JOIN preps_contracted_reps ON preps_contracted_reps_wn_writing_number_1_c.preps_cont9effed_reps_ida = preps_contracted_reps.id
LEFT OUTER JOIN wn_writing_number_cstm ON wn_writing_number_cstm.id_c = wn_writing_number.id
WHERE wn_writing_number_cstm.wn_writing_number_id_c = '53506bbe-008f-577c-2114-576b32e0ad11'
这里有一个查询生成器图来帮助说明此模型:
最后,这是该语句实际返回的内容,我需要再次运行该语句两次,每一行运行一次,其中包含我的 WHERE 中每条记录的
子句:ID
+---------+-------------+------------+-------------------------------------+
| title_c | name | first_name | last_name | percent_c | id_c |
+---------+-------------+------------+-------------------------------------+
| A | MP-AB0682-16| Andrea | Donald | 10 | 823462345 |
| GA | RO-RM4619-16| Ronald | Yeller | 12 | 632811634 |
+---------+-------------+------------+-----------+-----------+-------------+
请评论以获取任何需要的进一步说明。谢谢!
最佳答案
一个半伪代码答案来阐明我的方法(抱歉,没有时间提供更精确的解决方案,并且不要频繁地使用语法来准确记住它而无需查找):
DECLARE lastInsertCount INT;
DECLARE lastLayer INT;
CREATE TABLE `temp`
(
`layer` int,
[fields you want and parent's identifier]
);
INSERT INTO `temp`(`layer`, fields you want...)
SELECT 0, fields you want...
FROM theTable
WHERE [is "root" result]
;
SET lastLayer := 0;
SET lastInsertCount := 1;
LayerLoop: WHILE lastInsertCount > 0
INSERT INTO `temp`(`layer`, fields you want...)
SELECT lastLayer + 1, fields you want...
FROM theTable
WHERE parent_id IN (SELECT id FROM `temp` WHERE layer = lastLayer)
;
SET lastInsertCount := ROW_COUNT();
SET lastLayer := lastLayer + 1;
END WHILE LayerLoop;
SELECT fields you want...
FROM `temp`
;
DROP TABLE `temp`;
<小时/>
编辑:如果您允许树中的“循环”,这将使其不是一棵树(但我不得不担心坏数据),您可以通过添加
AND id NOT IN (SELECT id FROM `temp`)
到 where 子句。
关于mysql - 如何仅使用 MySQL 循环遍历表树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38490133/
当您在 Eclipse 中打开 XML 时,内容可以显示为树结构,如下所示 树“嵌入”在表格中,内容显示在单独的列中。 这在 Swing 中复制会非常好,不是专门针对 XML 内容,而是针对具有树结构
我有一个类别树,最多包含 3 级子类别,如下所示: 家居用品->客厅->沙发->双人座 家居产品->客厅->沙发->三人座 家居产品->客厅->沙发->四人座 因此,对于每个子级别,我都会根据母亲的类
嗨,我有这样的 HTML 表(通过代码中的注释 self 解释): Title RED BOX has a ball -->
我是一名优秀的程序员,十分优秀!