Mysql 修改嵌套父过程代码以使用名称而不是ID
我发现了一个我寻找了几个月的宝藏,一个SQL过程,它将所有父类别都列到子类别中,以便生成面包屑或提供类别搜索建议。但它需要类别ID才能找到它的父项,我想修改它以使用类别名称,因为我正在制作一个搜索框,提供搜索建议以显示类别及其所有父项 代码来自 我的表格结构如下所示:Mysql 修改嵌套父过程代码以使用名称而不是ID,mysql,sql,stored-procedures,Mysql,Sql,Stored Procedures,我发现了一个我寻找了几个月的宝藏,一个SQL过程,它将所有父类别都列到子类别中,以便生成面包屑或提供类别搜索建议。但它需要类别ID才能找到它的父项,我想修改它以使用类别名称,因为我正在制作一个搜索框,提供搜索建议以显示类别及其所有父项 代码来自 我的表格结构如下所示: +------------+-------------+-----------+ | website_id | name | parent_id | +------------+-------------+-----
+------------+-------------+-----------+
| website_id | name | parent_id |
+------------+-------------+-----------+
| 1 | Electronics | 0 |
+------------+-------------+-----------+
| 2 | Computers | 1 |
+------------+-------------+-----------+
| 3 | Asus | 2 |
+------------+-------------+-----------+
| 4 | Food | 0 |
+------------+-------------+-----------+
| 5 | Chicken | 4 |
+------------+-------------+-----------+
我希望当用户搜索“华硕”时,我会得到一个显示“3-asus,2-Computers,1-Electronics”的表格结果,以便在下拉列表中显示“Electronics->Computers->asus”
现在,如果我使用:调用getAllParentCategories(3,10)
,它的工作原理与预期一样,我希望它能像调用getAllParentCategories('asus',10)
,但我的SQL知识对我没有帮助
谢谢您的帮助。您想更改过程,使其接受类别名称而不是类别id作为第一个参数。过程的输出应保持不变 一种解决方案是在查询中添加一个额外步骤,从
nameCat
参数初始化idCat
变量:
CREATE PROCEDURE `getAllParentCategories`( IN nameCat VARCHAR(255), IN intMaxDepth int)
BEGIN
...
SET chrFullReturn = '';
SELECT @param := website_id FROM sb_categories WHERE name = nameCat;
set chrProcessed = concat('|',@param, '|');
...
代码的其余部分应该保持不变
请注意,只有在类别名称唯一的情况下,此功能才能正常工作。。。您可能需要在此列上创建唯一约束:
ALTER TABLE sb_categories ADD CONSTRAINT UC_name UNIQUE (name);
我感谢你的帮助。我刚刚将
(在nameCat int
中)更改为(在nameCat VARCHAR(255)中)
@tinyCoder:欢迎!我也修复了答案中的数据类型。GMB,再次您好。您能提供一个解决方案来避免类别的唯一名称吗?我有很多相似的名称,但在不同的父类别下,我需要所有这些名称都显示出来,这可能吗?
ALTER TABLE sb_categories ADD CONSTRAINT UC_name UNIQUE (name);