Php Mysql,如何查询以字符串作为输入从数据库中获取名称?

Php Mysql,如何查询以字符串作为输入从数据库中获取名称?,php,mysql,Php,Mysql,我的表中有一列名称。例如,有价值的鲜奶油 输入字符串的值类似于此产品由新鲜奶油制成,并且是新鲜制作的。 我尝试过使用正则表达式,在类似字符串的基础上拆分字符串 Select * From products where product_name REGEXP ('[[:<:]]This[[:>:]]|[[:<:]]product[[:>:]]|[[:<:]]made[[:>:]]|[[:<:]]of[[:>:]]|[[:<:]]fres

我的表中有一列名称。例如,有价值的鲜奶油

输入字符串的值类似于此产品由新鲜奶油制成,并且是新鲜制作的。

我尝试过使用正则表达式,在类似字符串的基础上拆分字符串

    Select * From products where product_name REGEXP ('[[:<:]]This[[:>:]]|[[:<:]]product[[:>:]]|[[:<:]]made[[:>:]]|[[:<:]]of[[:>:]]|[[:<:]]fresh[[:>:]]|[[:<:]]cream[[:>:]]')

或者诸如此类的事情

我认为你考虑得太多了。或者我错过了什么。但这不应该起作用吗(并且比REGEXP快得多):


这将获得所有包含
鲜奶油的记录以及任何前面或后面的字符串。

我认为您考虑得太多了。或者我错过了什么。但这不应该起作用吗(并且比REGEXP快得多):


这将获取所有包含
新鲜奶油的记录以及任何前面或后面的字符串。

您需要获取所有“名称”,然后检查您的输入是否包含其中一个。然后可以使用“LIKE%%”表达式

list_of_name = SELECT product_name FROM products;
input = "This product is made of fresh cream and it is fresh made.";
foreach (list_of_name as name){
    if (strpos(input, name) !== false){
        matched_name = name;
        break;
    }
expr = "%" . matched_name . "%";
product = SELECT * FROM products WHERE product_name LIKE expr;
}

您需要获取所有“名称”,然后检查您的输入是否包含其中一个。然后可以使用“LIKE%%”表达式

list_of_name = SELECT product_name FROM products;
input = "This product is made of fresh cream and it is fresh made.";
foreach (list_of_name as name){
    if (strpos(input, name) !== false){
        matched_name = name;
        break;
    }
expr = "%" . matched_name . "%";
product = SELECT * FROM products WHERE product_name LIKE expr;
}


您不能使用LIKE吗?
“从产品中选择*,其中产品名称如“%fresh cream%”
,但我没有确切的单词,我有一个字符串,其中多个名称可以包含在产品名称列值前后的
%
,然后使用LIKE与静态搜索输入字符串进行比较。您不能使用LIKE吗?
“从产品中选择*,其中产品名称如“%fresh cream%”
,但我没有确切的单词。我有一个字符串,其中多个名称可以包含在产品名称列值前后的
%
,然后使用LIKE与静态搜索输入字符串进行比较。是否有速度声明的来源?@Script47 REGEXP不能使用索引,而LIKE可以。谢谢回复。但我有长字符串值。我怎样才能从这个字符串中得到这个名称。因为我甚至不知道这个名字存在于输入或not@Kaleem,在那种情况下
LOCATE()
是一个选项,或者您可以将一些逻辑移到脚本语言中,然后在查询中使用它之前从句子中选择正确的单词。@Kaleem,没有
fast
方法可以单独在MySQL中做您想做的事情。我建议您先获取所有的
产品名称
,然后从句子中挑选出来。是否有速度声明的来源?@Script47 REGEXP在使用索引时不能像使用索引一样。谢谢您的回复。但我有长字符串值。我怎样才能从这个字符串中得到这个名称。因为我甚至不知道这个名字存在于输入或not@Kaleem,在那种情况下
LOCATE()
是一个选项,或者您可以将一些逻辑移到脚本语言中,然后在查询中使用它之前从句子中选择正确的单词。@Kaleem,没有
fast
方法可以单独在MySQL中做您想做的事情。我建议您先获取所有的
产品名称
,然后从句子中挑选出来。如果产品表有大量数据怎么办?在这种情况下,它会导致速度或任何其他问题吗?我不这样认为,我们在这里迭代的唯一数据是字符串“name”,我不认为您的表中有超过100000个名称?迭代数十万个字符串需要不到1s的时间,所以..如果产品表中有大量数据呢?在这种情况下,它会导致速度或任何其他问题吗?我不这样认为,我们在这里迭代的唯一数据是“name”,它是字符串,我不认为您的表中有超过100000个名称?迭代数十万个字符串需要不到1s的时间,所以。。
list_of_name = SELECT product_name FROM products;
input = "This product is made of fresh cream and it is fresh made.";
foreach (list_of_name as name){
    if (strpos(input, name) !== false){
        matched_name = name;
        break;
    }
expr = "%" . matched_name . "%";
product = SELECT * FROM products WHERE product_name LIKE expr;
}