mysql查询用于检查csv字符串中的匹配项

时间:2014-09-03 19:50:51

标签: mysql csv

将尝试尽可能地解释要求。 有一个逗号分隔的字符串列表,供一个人感兴趣。例如以下2人的例子

P1: "hockey, cricket, IT"
P2: "TV, football, cricket"

现在的目的是检查与其他用户的某个用户是否存在任何匹配值。在上面的例子中,我们应该从列表中得到板球。

对于mysql查询的任何帮助都将受到高度赞赏。

2 个答案:

答案 0 :(得分:0)

按照这种方式:

    $string1 = 'hockey, cricket, IT';
    $arrP1 = explode(',',$string1);

    $string2 = 'TV, football, cricket';
    $arrP2 = explode(',',$string2);

    $strResult = array_intersect($arrP1, $arrP2);

    print_r($strResult);//cricket

答案 1 :(得分:0)

可能不是最理想的选择,但有时您别无选择。 首先创建一个数字表。 (只是一个表,其中csv字符串中的1-maxitems中有足够的数字)。 然后创建此函数:

 CREATE FUNCTION `CsvMatch`(`csv1` VARCHAR(255), `csv2` VARCHAR(255)) RETURNS varchar(255) CHARSET utf8
BEGIN   
    DECLARE returnVal VARCHAR(255);

    SELECT result INTO returnVal FROM (
        SELECT
            SUBSTRING_INDEX(SUBSTRING_INDEX(csv1, ',', numbers.number), ',', -1) result
        FROM 
            numbers WHERE CHAR_LENGTH(csv1) - CHAR_LENGTH(REPLACE(csv1, ',', ''))>=numbers.number-1
        HAVING FIND_IN_SET(result,csv2)
    )d LIMIT 1;
    RETURN returnVal;
END

使用以下方式调用此方法:

SELECT CsvMatch('123,321,222','555,321,551'); # returns 321

它将返回第一个匹配项或NULL。