Je ne sais pas si un framework de base de données est utilisé. Si c'est le cas, il existe généralement des solutions correspondantes. Par exemple, dans mybatis, vous pouvez utiliser iftest pour déterminer si l'instruction like doit être exécutée.
Une autre méthode consiste à utiliser les fonctions de la base de données elle-même, comme IF (expr1, expr2, expr3) ou IF ELSE
S'il n'y a pas de paramètres d'entrée au front-end, pourquoi avez-vous besoin d'interroger les résultats de ce champ ? Cela ne viole-t-il pas la logique métier ?
where IFNULL(name, '') like'%xx%' and IFNULL(method, '') like '%xx%' Si name est null et convertissez-le en empty string, alors %% correspondra.
Cependant, je pense que le meilleur moyen est d'utiliser SQL pour ajouter un jugement logique. Le nombre de modifications doit être très faible et cela ne nécessite que quelques lignes de code. Le questionneur peut jeter un œil au SQL de @家菜菜 et ajouter une condition where 1=1 Il sera alors très simple d'ajouter une condition à la condition if.
Il est préférable de l'écrire dans la couche de logique métier (c'est ce que cette couche est censée faire). Ne gérez pas ce genre de chose dans la couche de base de données. C'est très déraisonnable et inefficace.
Le moyen simple est de convertir la valeur nulle du tableau en '' where ifnull(name,'') like'%%' and ifnull(method,'') like '%%' Si vous ne tenez pas compte de l'efficacité, tout ira bien
Le questionneur souhaite simplement intégrer les conditions de requête sur l'interface dans la condition Where de l'instruction SQL. Ceci est en effet très pratique dans le traitement du programme. Cependant, pour des raisons de sécurité, il est préférable de ne pas le faire car il existe du SQL. risque d'injection.
S'il s'agit d'une application interne, l'environnement est en effet très sécurisé Compte tenu des performances, il est quand même recommandé de gérer la logique d'épissage du code SQL. Sans ce paramètre, n'épelez pas la clause Where correspondante. si c'est Java, il peut s'écrire comme :
String whereClause = "where xxxxxx"
+("".equals(nameStr) ? "" : "name like '%"+nameStr+"%'")
+("".equals(methodStr) ? "" : "method like '%"+methodStr+"%'")
*Voici les hypothèses :
nameStr et methodStr sont respectivement le contenu d'entrée de l'utilisateur obtenu à partir de l'interface. Si l'utilisateur ne saisit pas, le résultat sera une chaîne vide au lieu de null
.
xxxxxx sont d'autres conditions Where. S'il n'y a vraiment pas d'autres conditions, alors vous devez gérer la chaîne "where" elle-même*
SÉLECTIONNER
DE
OÙ
ET NOM COMME concat(
J'ai écrit un dépannage pour le nom, vous pouvez vérifier l'autre vous-même, ce n'est peut-être pas la meilleure solution
Vous pouvez l'écrire en logique métier, pas nécessairement en SQL
Je ne sais pas si un framework de base de données est utilisé. Si c'est le cas, il existe généralement des solutions correspondantes.
Par exemple, dans mybatis, vous pouvez utiliser iftest pour déterminer si l'instruction like doit être exécutée.
Une autre méthode consiste à utiliser les fonctions de la base de données elle-même, comme IF (expr1, expr2, expr3) ou IF ELSE
S'il n'y a pas de paramètres d'entrée au front-end, pourquoi avez-vous besoin d'interroger les résultats de ce champ ? Cela ne viole-t-il pas la logique métier ?
where IFNULL(name, '') like'%xx%' and IFNULL(method, '') like '%xx%'
Si
name
estnull
et convertissez-le enempty string
, alors%%
correspondra.Cependant, je pense que le meilleur moyen est d'utiliser
SQL
pour ajouter un jugement logique. Le nombre de modifications doit être très faible et cela ne nécessite que quelques lignes de code. Le questionneur peut jeter un œil au SQL de @家菜菜 et ajouter une conditionwhere 1=1
Il sera alors très simple d'ajouter une condition à la conditionif
.Il est préférable de l'écrire dans la couche de logique métier (c'est ce que cette couche est censée faire). Ne gérez pas ce genre de chose dans la couche de base de données. C'est très déraisonnable et inefficace.
Le moyen simple est de convertir la valeur nulle du tableau en ''
where ifnull(name,'') like'%%' and ifnull(method,'') like '%%'
Si vous ne tenez pas compte de l'efficacité, tout ira bien
Le questionneur souhaite simplement intégrer les conditions de requête sur l'interface dans la condition Where de l'instruction SQL. Ceci est en effet très pratique dans le traitement du programme. Cependant, pour des raisons de sécurité, il est préférable de ne pas le faire car il existe du SQL. risque d'injection.
S'il s'agit d'une application interne, l'environnement est en effet très sécurisé Compte tenu des performances, il est quand même recommandé de gérer la logique d'épissage du code SQL. Sans ce paramètre, n'épelez pas la clause Where correspondante. si c'est Java, il peut s'écrire comme :
*Voici les hypothèses :
nameStr et methodStr sont respectivement le contenu d'entrée de l'utilisateur obtenu à partir de l'interface. Si l'utilisateur ne saisit pas, le résultat sera une chaîne vide au lieu de null
xxxxxx sont d'autres conditions Where. S'il n'y a vraiment pas d'autres conditions, alors vous devez gérer la chaîne "where" elle-même*
Si la valeur par défaut de la base de données est nulle, ou lorsque la valeur obtenue est nulle, remplacez-la par nu. .
où nom='' ou méthode ='' ou nom comme '%%' et méthode comme '%%'