Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menyoal Pangkalan Data dengan Klausa IN Menggunakan Slice in Go?

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

DDD
DDDasal
2024-10-26 15:44:02159semak imbas

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>

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>

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>

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!

Kenyataan:
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