如何使用mysql查询检索记录的精确字符串匹配?

如何使用mysql查询检索记录的精确字符串匹配?,mysql,Mysql,这是我的桌子 create table t (name varchar(100)); insert into t values ('35,12'); insert into t values ('35'); insert into t values ('35,56'); insert into t values ('46,56'); insert into t values ('23,12'); 如果我搜索记录35,56,它会返回完全匹配的记录,但我想检索所有记录上的35和56。我在php

这是我的桌子

create table t (name varchar(100));

insert into t values ('35,12');
insert into t values ('35');
insert into t values ('35,56');
insert into t values ('46,56');
insert into t values ('23,12'); 

如果我搜索记录35,56,它会返回完全匹配的记录,但我想检索所有记录上的35和56。我在php变量中传递值,比如$test='35,56'

我要检索的输出是:

35,12
35
35,56
46,56
如有任何帮助,将不胜感激


谢谢

从t中选择名称,其中名称如“35%”或名称如“%”,56%”

SELECT name FROM t
WHERE name LIKE '35,%' OR t LIKE '%,56' 
+-------+

|名字|

+-------+

|35,12|

|三十五|

|35,56|

|46,56|

+-------+

`$test=“35,56”;
$keys=分解(“,”,$test);
$query=“从t中选择名称,其中名称类似于“”。$keys[0]。“%”或名称类似于“%”,“$keys[1]。“%”;
$result=mysql\u query($query)或die(mysql\u error());
$cnt=mysql\u num\u行($result);
而($array=mysql\u fetch\u array($result)){
echo$array['name']。
; }`
,MySQL有一个功能:
find\u in\u set()

这将精确测试56中的35,无论它们在name列中的顺序如何。如果“名称”列中有两个以上的数字,则此选项也适用。如果测试“56”,并且名称列包含156,则此查询将不为真

要使像
这样的表达式安全,需要做大量的工作。

试试这个

 SELECT name FROM t
 WHERE FIND_IN_SET('35',name) 
 or FIND_IN_SET('56',name)

它将在php变量$test='35,56'中准确地给出u askI传递的值。现在我如何在查询中调用它?但是这个代码是错误的。如果名称为'56,35',则在测试56时,这将不会真正起作用,如果名称为'320561',则此表达式也将为真。我在php变量$test='35,56'中传递值。现在我如何在查询中调用它?为什么第一个子句使用
name
,第二个子句使用
t
SELECT t.name FROM t
WHERE FIND_IN_SET('35',t.name) + FIND_IN_SET('56',t.name) > 0
 SELECT name FROM t
 WHERE FIND_IN_SET('35',name) 
 or FIND_IN_SET('56',name)