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

王林
リリース: 2023-05-31 10:17:03
転載
1756 人が閲覧しました

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 までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!