Maison  >  Article  >  base de données  >  Quelle est la méthode d'utilisation de la chaîne dans la condition dans MySQL

Quelle est la méthode d'utilisation de la chaîne dans la condition dans MySQL

王林
王林avant
2023-05-31 10:17:031791parcourir

La condition in dans MySQL utilise des chaînes

Scénario

Lorsque SQL utilise in comme condition, un paramètre est utilisé pour satisfaire la condition de requête, et transmettre directement la chaîne ne peut pas satisfaire la condition.

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

Méthode

Utiliser la fonction FIND_IN_SET(str,strlist)

select id,name from user where FIND_IN_SET(id,#{strlist})
  • str : champ conditionnelstr: 条件字段

  • strlist

strlist : ensemble de valeurs correspondantes

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

La requête MySQL dans le paramètre de condition est une chaîne avec une virgule, le résultat de la requête est faux

S'il y a le sql suivant :
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 est la valeur interrogée dans la table des comptes

‘9,8,4&rsquo ;

Le résultat correct de la requête SQL doit être :

Non recommandé, promouvoir les clients, promouvoir les clients

Le résultat réel est :

Non recommandé

Raison :

Si dans mysql est une chaîne Si c'est le cas, elle sera automatiquement convertie en type int. La méthode suivante est utilisée en interne :

CAST('4,3' AS INT)

Parce que la virgule est écrite par erreur sous forme de point-virgule, "4,3" devient "4;", donc le le résultat de la requête ci-dessus SQL ne contient que le premier.

Solution🎜
FIND_IN_SET('查询的值(如:1)', '使用逗号隔开的字符串集合,如:('1,2,3')')
🎜Corriger 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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer