我有一个来自eBay的关于categoryName的API响应,即:“E Liquids& E Cig Cartridges”麻烦的是,我无法搜索“E”会在我自己的类别列表中带回太多结果,所以我会必须扫描大于3个字母甚至4个字的句子,我需要搜索每个单词,然后查找我自己的类别列表,看看哪个最适合API调用中的未知句子,并将类别设置为最佳匹配,I我不是一个sql向导因此我的问题。我想象一个创建一个临时的sql函数然后循环,直到找到一个结果。提前感谢您的帮助。
答案 0 :(得分:0)
以下是实现此目的的方法:
/*
CREATE TABLE testData(result INT, term CHAR(255));
INSERT INTO testData VALUES
(1, 'Cig'),
(2, 'Liquids'),
(3, 'E');
*/
SET @NGram = 'E Liquids & E Cig Cartridges';
DELIMITER $
DROP PROCEDURE IF EXISTS parseNGram$
CREATE PROCEDURE parseNGram(VNGram TEXT)
BEGIN
DECLARE VN, VLoopPos, VGramLength INTEGER;
DECLARE VGram CHAR(255);
SET VN = CHAR_LENGTH(VNGram) - CHAR_LENGTH(REPLACE(VNGram, ' ', '')) + 1;
SET VLoopPos = 0;
searchLoop: WHILE VLoopPos < VN DO
SET VGramLength = LOCATE(' ', VNGram);
SET VGram = LEFT(VNGram, VGRamLength);
SET VNGram = RIGHT(VNGram, CHAR_LENGTH(VNGram) - VGramLength);
IF CHAR_LENGTH(VGram) > 1 THEN
# Do someting with the required token, here is an example
SELECT result FROM testData WHERE term = VGram LIMIT 1;
LEAVE searchLoop;
END IF;
END WHILE;
END$
DELIMITER ;
CALL parseNGram(@NGram);
如果我错过任何内容,请告诉我,
此致
詹姆斯