我有很多产品需要分配类别和表格,其中包含用于识别内容的关键字。 一个类别可能有多个关键字,在这种情况下,应使用顶部的第一个匹配。
我提出了这个测试用例,它可以根据需要运行:
CREATE TABLE Products
(`name` varchar(30), `category_id` int, `filter` varchar (30))
;
INSERT INTO Products
(`name`)
VALUES
('Plate'),
('Mushrooms'),
('Mushroom soup in a plate'),
('Mushroom on a plate'),
('Tomato soup'),
('Sausage'),
('Soupcan')
;
CREATE TABLE Filters
(`filter` varchar(30), `category_name` varchar(30))
;
INSERT INTO Filters
(`filter`, `category_name`)
VALUES
('Soup', 'Meals'),
('Mushroom', 'Ingredients'),
('Plate', 'Containers')
;
CREATE TABLE Categories
(`id` int, `name` varchar(30))
;
INSERT INTO Categories
(`id`, `name`)
VALUES
(1, "Ingredients"),
(2, 'Containers'),
(3, 'Meals')
;
update Products
left join Filters
on Products.name LIKE CONCAT('%',Filters.filter,'%')
join Categories
on Filters.category_name = Categories.name
set Products.category_id = Categories.id, Products.filter = Filters.filter;
select Products.*, Categories.name as category_name from Products
left join Categories on Products.category_id = Categories.id
按照我需要的方式,按照#34;过滤器"中的第一个匹配分配类别
但是如果我向Filter表中添加另一行具有相同category_id的行(例如尝试添加:(' Soupcan','容器')到过滤器),结果不会是第一场比赛(或最后一场比赛)
"盘中的蘑菇汤"必须去"用餐",因为它匹配第一个过滤行" Soup"。
但是,如果我添加' Soupcan',容器'排到过滤器 - "盘子里的蘑菇汤"现在将匹配"蘑菇"并进入"成分"类别。
我认为问题在于在第一次和第二次加入之间进行排序,但我无法弄明白。
如果您知道更好的方法来完成这项任务 - 请随时提供。 我只需要通过关键字匹配对产品进行排序,其中匹配的最顶层关键字将具有优先级。
答案 0 :(得分:1)