如何使用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)