Heim > Backend-Entwicklung > Golang > Wie frage ich eine Datenbank mit einer IN-Klausel mithilfe eines Slice in Go ab?

Wie frage ich eine Datenbank mit einer IN-Klausel mithilfe eines Slice in Go ab?

DDD
Freigeben: 2024-10-26 15:44:02
Original
270 Leute haben es durchsucht

How to Query a Database with an IN Clause Using a Slice in Go?

Abfragen einer Datenbank mithilfe der IN-Klausel mit einem Slice in Go

Bei Datenbankabfragen ist es üblich, Ergebnisse basierend auf einer Teilmenge von Werten mithilfe von zu filtern die IN-Klausel. Bei der Arbeit mit einem Ganzzahlsegment in Go kann es jedoch schwierig sein, IN-Klauseln zu erstellen, die sowohl syntaktisch gültig als auch idiomatisch sind.

Betrachten Sie die folgende Abfrage, die versucht, unterschiedliche Titel aus zwei verbundenen Tabellen abzurufen. Die IN-Klausel wird mit dem Inhalt eines Slice namens artIds gefüllt:

<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>
Nach dem Login kopieren

Die Fehlerbehandlung wurde der Kürze halber weggelassen. Die Abfrage schlägt fehl, weil Datenbank/SQL Argumente direkt an den Treiber übergibt, der abhängig von der Länge des Slice eine variable Anzahl von Bindvars erwartet.

Alternativ wird eine Abfrage, die eine statische IN-Klausel verwendet, erfolgreich ausgeführt:

<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>
Nach dem Login kopieren

Eine Lösung für dieses Problem ist die Verwendung der SQLX-Bibliothek, die mehr Kontrolle über Datenbankabfragen bietet. Mit der Funktion sqlx.In können Abfragen mit IN-Klauseln verarbeitet und die erforderlichen Bindvars dynamisch erstellt werden:

<code class="go">var levels = []int{4, 6, 7}
query, args, err := sqlx.In("SELECT * FROM users WHERE level IN (?);", levels)</code>
Nach dem Login kopieren

Die resultierende Abfrage und die Argumente können dann zum Ausführen der vorbereiteten Anweisung verwendet werden. Durch die Verwendung der Funktion „sqlx.In“ wird sichergestellt, dass die Abfrage syntaktisch gültig ist und mit dem angegebenen Wertebereich effizient ausgeführt werden kann.

Das obige ist der detaillierte Inhalt vonWie frage ich eine Datenbank mit einer IN-Klausel mithilfe eines Slice in Go ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage