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

时间:2013-11-15 07:27:52

标签: 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变量中传递值,如$ test = '35,56'。

我想检索输出是:

35,12
35
35,56
46,56

任何帮助将不胜感激?

感谢。

4 个答案:

答案 0 :(得分:0)

select name FROM t WHERE name LIKE '35%' OR name LIKE '%,56%';

+ ------- +

|名字|

+ ------- +

| 35,12 |

| 35 |

| 35,56 |

| 46,56 |

+ ------- +

`$test = "35,56";
    $keys = explode(',', $test);
    $query = "select name FROM t WHERE name LIKE '".$keys[0]."%' OR name LIKE '%,".$keys[1]."%'";
    $result = mysql_query($query) or die(mysql_error());
     $cnt = mysql_num_rows($result);
    while ($array = mysql_fetch_array($result)) {
       echo $array['name'].'<br>';
    }`

答案 1 :(得分:0)

,MySQL有一个功能:find_in_set()

SELECT t.name FROM t
WHERE FIND_IN_SET('35',t.name) + FIND_IN_SET('56',t.name) > 0

这将完全测试56的数字35,无论它们在名称列中的顺序如何。如果名称列中有两个以上的数字,这也有效。如果您测试'56'并且名称列包含156,则此查询将不为真。

使用LIKE表达式来保证安全是很有效的。

答案 2 :(得分:0)

试试这个

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

demo

答案 3 :(得分:-3)

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