ホームページ  >  記事  >  データベース  >  mysqlの条件で文字列を使用する方法は何ですか

mysqlの条件で文字列を使用する方法は何ですか

王林
王林転載
2023-05-31 10:17:031791ブラウズ

mysql の in 条件は文字列を使用します

シナリオ

SQL が in を条件として使用する場合、クエリ条件を満たすためにパラメータが使用されます。文字列を直接渡すことはクエリ条件を満たすことができません。状態。

select id,name from user where id in(?)

メソッド

FIND_IN_SET(str,strlist)関数を使用

select id,name from user where FIND_IN_SET(id,#{strlist})
  • ##str: 条件フィールド

  • ##strlist
  • : 一致する値セット

    select id,name from user where FIND_IN_SET(id,'111,22,333')

    mysql クエリの条件パラメータはカンマ付きの文字列です。クエリ結果は間違っています
次の SQL がある場合:

SELECT
    (
        SELECT
            GROUP_CONCAT(content)
        FROM
            account_limit_user ur
        WHERE
            ur.id IN (T1.limit_user)
        GROUP BY
            ur.id
    ) AS limit_user
FROM
    account T1
WHERE
    1 = 1

T1.limit_user はアカウント テーブルからクエリされた値です。

‘9,8,4’

Query sql 正しいクエリ結果は次のようになります:

#推奨されません、顧客を促進します、顧客を促進します

実際の結果は次のとおりです:

非推奨

理由:

mysql の in が文字列の場合、自動的に int 型に変換されます。内部的には以下のメソッドが使用されます。 :

CAST('4,3' AS INT)
カンマを誤ってセミコロンとして記述したため、「4,3」は「4;」となり、上記のクエリ SQL の結果には最初の 1 つだけが含まれます。

解決策

FIND_IN_SET('查询的值(如:1)', '使用逗号隔开的字符串集合,如:('1,2,3')')

正しいSQL

SELECT
    (
        SELECT
            GROUP_CONCAT(content)
        FROM
            account_limit_user ur 
        WHERE
            FIND_IN_SET(ur.id, T1.limit_user) > 0
    ) AS limit_user,
    T1.limit_user limit_userid
FROM
    account T1
WHERE
    1 = 1

以上がmysqlの条件で文字列を使用する方法は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。