我在 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/