Maison >développement back-end >Golang >Comment interroger une base de données avec une clause IN à l'aide d'une tranche en Go ?
Interrogation d'une base de données à l'aide de la clause IN avec une tranche en Go
Dans l'interrogation d'une base de données, il est courant de filtrer les résultats en fonction d'un sous-ensemble de valeurs à l'aide la clause IN. Cependant, lorsque vous travaillez avec une tranche d'entiers dans Go, il peut être difficile de créer des clauses IN à la fois syntaxiquement valides et idiomatiques.
Considérez la requête suivante, qui tente de récupérer des titres distincts à partir de deux tables jointes. La clause IN est renseignée avec le contenu d'une tranche nommée artIds :
<code class="go">inq := "6,7" //strings.Join(artIds, ",") rows, err = db.Query("SELECT DISTINCT title FROM tags_for_articles LEFT JOIN tags ON tags.id = tags_for_articles.tag_id WHERE article_id IN (?)", inq)</code>
La gestion des erreurs a été omise par souci de concision. La requête échoue car la base de données/sql transmet les arguments directement au pilote, qui attend un nombre variable de bindvars en fonction de la longueur de la tranche.
Alternativement, une requête qui utilise une clause IN statique s'exécutera avec succès :
<code class="go">rows, err = db.Query("SELECT DISTINCT title FROM tags_for_articles LEFT JOIN tags ON tags.id = tags_for_articles.tag_id WHERE article_id IN (6,7)", inq)</code>
Une solution à ce problème consiste à utiliser la bibliothèque sqlx, qui offre plus de contrôle sur les requêtes de base de données. La fonction sqlx.In peut être utilisée pour traiter des requêtes avec des clauses IN et créer dynamiquement les bindvars nécessaires :
<code class="go">var levels = []int{4, 6, 7} query, args, err := sqlx.In("SELECT * FROM users WHERE level IN (?);", levels)</code>
La requête et les arguments résultants peuvent ensuite être utilisés pour exécuter l'instruction préparée. L'utilisation de la fonction sqlx.In garantit que la requête est syntaxiquement valide et peut être exécutée efficacement avec la tranche de valeurs donnée.
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!