mysql - 获取嵌套集合祖先 where 条件

标签 mysql sql sql-order-by nested-sets

在 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;

SQL Fiddle

关于mysql - 获取嵌套集合祖先 where 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34143230/

相关文章:

php - 使用 mysql 和 php 在逗号分隔的值内搜索

PHP 导入失败

php - 重新排序数据库结果

mysql - SQL - 在父子连接中按子属性排序结果

php - SQL:GROUP BY 记录,然后从每个组中获取最后一条记录?

php - 谷歌地图 API 和 XML

c# - 将复合键与 Entity Framework Core 结合使用并将其中的一部分用作外键

MySQL比较电子邮件并匹配,即使一个大写另一个小写

java - com.mysql.jdbc.driver 类未找到异常

sql - PostgreSQL - 按数组排序