2

countryユーザーがデータベースに何かを追加する前に、国コードがセルに存在するかどうかを確認しようとしています。したがって、国コードが存在しない場合、彼は何も追加できません。

国コードをコンマ区切りの値として保存しています。列の型は VARCHAR です。

"id"    "rtype" "country"
"1"     "0"     "US,UK,SE,CA"
"2"     "1"     "US"
"3"     "2"     "UK"

次のクエリを実行しましたが、行がありません。ここでどこが間違っていますか?問題は、このクエリをカンマ区切りの値と単一の値で実行する必要があることです。

select id, rtype from test where id=1 and country in('US')

予想された結果

id | rType
 1 |   0

select id, rtype from test where id=2 and country in('US')

予想された結果

id | rType
 2 |   0
4

3 に答える 3

3

これを試してください:

SELECT id, rtype FROM test
WHERE FIND_IN_SET('US', country) > 0

FIND_IN_SET(str,strlist)関数の動作は次のとおりです。

文字列 str が N 個の部分文字列で構成される文字列リスト strlist にある場合、1 から N の範囲の値を返します。文字列リストは、「,」文字で区切られた部分文字列で構成される文字列です。[...] str が strlist にない場合、または strlist が空の文字列の場合は 0 を返します。

于 2013-10-16T04:26:16.773 に答える
1

MySQL には非常に優れたSet Datatypeがあります。これは非常に効率的で、255 個の値の 64 個の異なるメンバーまで格納できます。列のタイプを変更できるかどうかはわかりませんが、多くの問題を解決できます。

  1. あなたの列はインデックス可能です
  2. 誤って重複した値を保存することはありません
  3. それは非常に効率的に保存されます
  4. 無効な値は無視されます (厳密モードの場合はエラーになります)。
  5. 末尾のスペースは削除されます

FIND_IN_SET関数を使用して検索します。

于 2013-10-16T04:34:29.273 に答える
0

国コードはカンマ区切り値であるため、 in を直接使用することはできません。代わりに好きにすることができます。

国が '%US%' のようなテストから ID、rtype を選択

于 2013-10-16T04:28:31.783 に答える