4

答えはとても簡単かもしれませんが、私が望む適切な MySQL クエリが見つかりません。

私はテーブルユーザーを持っています:

| id_user |  name   | action_type |
+---------------------------------+
|    1    | joshua  |  1,13,12,40 |
|    2    | joshua  |  2,8        |

そして、列に正確な数がある行のみを選択したいと思いaction_typeます。

action_typeMySQL に TEXT として保存されます。

私はこれを試しました:

SELECT * FROM user WHERE action_type LIKE '%2%'

しかし、それは私が望むものではない12行を選択しました:(

IN演算子で可能かもしれませんが、これを使用する正しい方法が見つかりませんでした。

4

3 に答える 3

3

あなたは探しているFIND_IN_SET

SELECT *
FROM user
WHERE FIND_IN_SET( '2', action_type )

SQL フィドルのデモ

アップデート

一応言っておきますが、これも可能です

SELECT *
FROM user
WHERE FIND_IN_SET( 2, action_type )

MySQL は char への自動変換を行います

于 2012-12-18T08:01:41.460 に答える
2

LIKE句に区切り記号を含めます。

SELECT *
FROM   user
WHERE  action_type LIKE '2,%'
        OR action_type LIKE '%,2,%'
        OR action_type LIKE '%,2'

LIKE項目が文字列の先頭または末尾にある場合をカバーするために、2 つの追加の句を使用する必要があったことに注意してください。

于 2012-12-18T07:52:41.030 に答える
1

試す

SELECT * FROM user
WHERE CONCAT( ',', action_type, ',' ) LIKE '%,2,%';
  • Rufo卿からの正しい構文
于 2012-12-18T07:56:11.803 に答える