1

最初に言いたいのですが、この質問がすでに行われている場合は申し訳ありません(その時点でそれを見つけることができませんでした)。

私の問題はLIKE、mysqlに、コンマで区切られた行でいくつかの数値を検索する必要がある句があることです。(はい、コンマで区切られた行は使用するのに適していませんが、データベース構造を作成したのは私ではありません)。

だから私は次のことをしています:

  SELECT pfd.*, pu.username, pu.user_email 
  FROM phpbb_profile_fields_data pfd
  LEFT JOIN phpbb_users pu ON pfd.user_id=pu.user_id 
  WHERE pfd.pf_pf_produktionsteknik LIKE '%" . ($id) . "%' 
      AND pu.user_type!=1 AND pfd.pf_status=2";

しかし、ここで問題となるのは、LIKE等しい場所1(本来あるべき場所)だけでなく、11(すべきではない)場所にも戻るということです。

field_in_set仕事に就けなかったものを使ってみましたが、どうしたらいいのか迷ってしまいました。

4

4 に答える 4

1

リストがコンマで区切られている場合、数字の次にコンマ、OR コンマの次に数字、または等しい数字を単独で検索できますか。これは、単一の数のインスタンスを含むすべてのケースをカバーする必要があります。

于 2012-11-06T15:22:47.607 に答える
1

検索される値は、カンマで囲まれるか、リストの先頭に配置されている場合はカンマが続くか、リストの末尾に配置されている場合はカンマの後に続くか、それが唯一の値です (リストにカンマはありません)。

WHERE (pfd.pf_pf_produktionsteknik LIKE '%," . ($id) . ",%' 
    OR pfd.pf_pf_produktionsteknik LIKE '"($id) . ",%'    
    OR pfd.pf_pf_produktionsteknik LIKE '%," .($id) . "'    
    OR pfd.pf_pf_produktionsteknik = '" .($id) . "'    )  AND ...
于 2012-11-06T15:43:41.227 に答える
0

構造が不適切なデータを処理しているため、そのデータをアドレス指定する必要があります。コンマで区切られた数値のセットは1nfに含まれていません。これは、かなり基本的なことです。

これで邪魔にならないので、LIKEの代わりに正規表現を使用してみることができます。

SQLとして(値に注意してください1):

WHERE pfd.pf_pf_produktionsteknik REGEXP '\b1\b'

またはPHP文字列として:

..." WHERE pfd.pf_pf_produktionsteknik REGEXP '\b" . $id . "\b'"

...これは1に一致しますが、11には一致しません:\b「単語の境界」の正規表現です。これは、値の両側に文字列、句読点、または空白の先頭が必要であることを意味します$id

于 2012-11-06T15:27:08.193 に答える
0

(手動find_in_setの) mysql 関数は、探しているものです。カンマ区切りの値内の値を検索します。

select find_in_set('1', 'a,b,1,c');

これを与える:

+-----------------------------+
| find_in_set('1', 'a,b,1,c') |
+-----------------------------+
|                           3 |
+-----------------------------+
1 row in set (1.10 sec)

関数が失敗すると、0 が返されます。

あなたの場合、そうWHERE find_in_set('1', pfd.pf_pf_produktionsteknik) > 0することで必要なものが得られます。

于 2012-11-06T15:35:28.273 に答える