mysql类别树搜索

标签 mysql indexing tree sql-like varchar

我在 MySQL 5.1 上有以下架构

CREATE TABLE  `mytest` (
  `category` varchar(32) ,
  `item_name` varchar(255)
  KEY `key1` (`category`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

类别栏是这样填的

[:parent_parent_cat_id][:parent_cat_id][:leaf_cat_id]

10000200003000

如果您可以搜索以下所有类别:parent_parent_category_id

SELECT * FROM mytest WHERE category LIKE "10000%";

它正在使用索引 key1;

但是 当我想搜索 :parent_cat_id 时如何使用索引?

SELECT * FROM mytest WHERE category LIKE "%20000%";

你有更好的解决方案吗?

最佳答案

此模型称为物化路径

您只需要将类别放在一个单独的表中,并让items引用该表,而不是路径:

SELECT  i.*
FROM    categories c
JOIN    items i
ON      i.category = c.id
WHERE   c.path BETWEEN
        (
        SELECT  path
        FROM    categories ci
        WHERE   ci.id = '20000'
        )
        AND
        CONCAT(
        (
        SELECT  path
        FROM    categories ci
        WHERE   ci.id = '20000'
        ), ':')

关于mysql类别树搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4658236/

相关文章:

mysql - 数据库错误 : [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified

具有 *ANY* 标准的 Java SQL 准备语句

mysql:启动服务器时出现权限错误

mysql - SQL 别名不起作用

database - 在 PostgreSQL 表中创建多个索引的缺点

c++ - 是否有任何有效的方法来填充平衡树结构

java - 在 LDAP 中输入搜索词时检索所有子用户

mysql - 复合索引中的 OR 问题

sql - 加入因 WHERE 条件而减慢

Haskell - 从前缀表达式创建算术树