0

これは私のテーブルです。

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 はすべてのレコードに該当します。$test='35,56' のような php 変数で値を渡しています。

出力を取得したいのは次のとおりです。

35,12
35
35,56
46,56

どんな助けでも大歓迎ですか?

ありがとう。

4

4 に答える 4

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 の数字を正確にテストします。名前の列に 2 つ以上の数字がある場合、これも機能します。「56」をテストし、名前列に 156 が含まれている場合、このクエリは true になりません。

式でこれを安全にするのLIKEは大変な作業です。

于 2013-11-15T08:16:42.740 に答える
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>';
    }`
于 2013-11-15T07:35:50.000 に答える
0

これを試して

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

デモ

于 2013-11-15T09:03:03.110 に答える
-3
SELECT name FROM t
WHERE name LIKE '35,%' OR t LIKE '%,56' 
于 2013-11-15T07:32:30.987 に答える