sql查询分割一个句子并在每个单词上搜索结果

时间:2017-09-22 08:14:24

标签: php mysql sql ebay

我有一个来自eBay的关于categoryName的API响应,即:“E Liquids& E Cig Cartridges”麻烦的是,我无法搜索“E”会在我自己的类别列表中带回太多结果,所以我会必须扫描大于3个字母甚至4个字的句子,我需要搜索每个单词,然后查找我自己的类别列表,看看哪个最适合API调用中的未知句子,并将类别设置为最佳匹配,I我不是一个sql向导因此我的问题。我想象一个创建一个临时的sql函数然后循环,直到找到一个结果。提前感谢您的帮助。

1 个答案:

答案 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);

如果我错过任何内容,请告诉我,

此致

詹姆斯