Bagaimana untuk Menyoal Pangkalan Data dengan Klausa IN Menggunakan Slice in Go?

DDD
Lepaskan: 2024-10-26 15:44:02
asal
159 orang telah melayarinya

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

Mencari Pangkalan Data Menggunakan Klausa IN dengan Slice dalam Go

Dalam pertanyaan pangkalan data, adalah perkara biasa untuk menapis hasil berdasarkan subset nilai menggunakan klausa IN. Apabila bekerja dengan sekeping integer dalam Go, walau bagaimanapun, adalah sukar untuk mencipta klausa IN yang kedua-duanya sah dari segi sintaksis dan idiomatik.

Pertimbangkan pertanyaan berikut, yang cuba mendapatkan semula tajuk yang berbeza daripada dua jadual bercantum. Klausa IN diisi dengan kandungan kepingan bernama 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>
Salin selepas log masuk

Pengendalian ralat telah ditinggalkan untuk ringkasnya. Pertanyaan gagal kerana pangkalan data/sql menghantar argumen terus kepada pemacu, yang menjangkakan bilangan bindvar yang berubah-ubah bergantung pada panjang hirisan.

Sebagai alternatif, pertanyaan yang menggunakan klausa IN statik akan berjaya dilaksanakan:

<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>
Salin selepas log masuk

Satu penyelesaian kepada isu ini ialah menggunakan perpustakaan sqlx, yang memberikan lebih kawalan ke atas pertanyaan pangkalan data. Fungsi sqlx.In boleh digunakan untuk memproses pertanyaan dengan klausa IN dan mencipta bindvar yang diperlukan secara dinamik:

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

Pertanyaan dan args yang terhasil kemudiannya boleh digunakan untuk melaksanakan pernyataan yang disediakan. Menggunakan fungsi sqlx.In memastikan bahawa pertanyaan adalah sah dari segi sintaksis dan boleh dilaksanakan dengan cekap dengan kepingan nilai yang diberikan.

Atas ialah kandungan terperinci Bagaimana untuk Menyoal Pangkalan Data dengan Klausa IN Menggunakan Slice in Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!