在 mysql 中给定一个嵌套集,如下所示
+-------------+----------------------+-----+-----+------+
| category_id | name | lft | rgt | rank |
+-------------+----------------------+-----+-----+------+
| 1 | ELECTRONICS | 1 | 20 | 99
| 2 | TELEVISIONS | 2 | 9 | 50
| 3 | TUBE | 3 | 4 | 25
| 4 | LCD | 5 | 6 | 25
| 5 | PLASMA | 7 | 8 | 25
| 6 | PORTABLE ELECTRONICS | 10 | 19 | 50
| 7 | MP3 PLAYERS | 11 | 14 | 25
| 8 | FLASH | 12 | 13 | 10
| 9 | CD PLAYERS | 15 | 16 | 25
| 10 | 2 WAY RADIOS | 17 | 18 | 20
如何获得例如“Flash”的祖先,其中条件排名 >=50 AND <= 99 LIMIT 1 按 lft DESC 排序。 所以结果将是
+-------------+----------------------+-----+-----+------+
| category_id | name | lft | rgt | rank |
+-------------+----------------------+-----+-----+------+
| 6 | PORTABLE ELECTRONICS | 10 | 19 | 50
有关可视化,请参阅此链接 http://mikehillyer.com/media//categories.png
最佳答案
sql fiddle 现在对我不起作用,但你应该能够做这样的事情。
SELECT
c2.*
FROM
Categories as c1
INNER JOIN Categories as c2 ON
c1.`lft` >= c2.lft AND c1.`lft` <= c2.`rgt`
AND c2.`RANK` >=50 AND c2.`RANK` <= 99
WHERE
c1.`category_id` = 8
ORDER BY
c2.`lft` DESC
LIMIT 1;
关于mysql - 获取嵌套集合祖先 where 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34143230/