Bolehkah saya Sertai pada \';\' Nilai Terpisah dalam Lajur MySQL Tanpa Menggunakan Bahasa Luaran?

Susan Sarandon
Lepaskan: 2024-10-31 12:56:02
asal
779 orang telah melayarinya

Can I Join on ';' Separated Values in a MySQL Column Without Using External Languages?

Bolehkah saya Menyelesaikan Ini dengan MySQL Tulen? (Menyertai pada ';' Nilai Terpisah dalam Lajur)

Soalan ini timbul apabila anda mempunyai data yang tersebar merentas berbilang jadual dan perlu mendapatkannya dalam satu pertanyaan tanpa menggunakan bahasa luaran seperti PHP. Data disimpan dalam cara yang tidak normal, dengan berbilang nilai dalam satu lajur yang dipisahkan dengan koma bertitik (;).

Perihalan Masalah:

Dalam kes ini, sumber_pengguna jadual mempunyai lajur sumber yang mengandungi senarai ID sumber yang dipisahkan oleh koma bertitik:

user resources
user1 1;2;4
user2 2
user3 3;4

Keputusan yang Diingini:

Hasil yang diingini adalah untuk mendapatkan jadual yang menyenaraikan setiap pengguna dan sumber yang sepadan:

user data
user1 data1
user1 data2
user1 data4
user2 data2

Penyelesaian:

Penyelesaian melibatkan mencipta jadual 'dinormalkan' daripada jadual user_resource, merawat senarai ID sumber sebagai baris, dan menyertai jadual ternormal dengan jadual sumber. 'Penormalan' ini dicapai menggunakan gabungan fungsi COUNT_IN_SET dan VALUE_IN_SET.

Jadual Dinormalisasi:

Jadual 'dinormalkan' yang dijana akan menyerupai yang berikut:

user resources resources_index resources_value
sampleuser 1;2;3 1 1
sampleuser 1;2;3 2 2
sampleuser 1;2;3 3 3
stacky 2 1 2
testuser 1;3 1 1
testuser 1;3 2 3

Pertanyaan Akhir:

<code class="sql">SELECT user_resource.user, 
       resource.data

FROM user_resource 
     JOIN integerseries AS isequence 
       ON isequence.id <= COUNT_IN_SET(user_resource.resources, ';')
     JOIN resource 
       ON resource.id = VALUE_IN_SET(user_resource.resources, ';', isequence.id)      
ORDER BY
       user_resource.user,  resource.data</code>
Salin selepas log masuk

Fungsi Digunakan:

Fungsi COUNT_IN_SET dan VALUE_IN_SET digunakan seperti berikut:

  • COUNT_IN_SET: Mengembalikan kiraan item yang dibataskan aksara dalam lajur yang diberikan.
  • VALUE_IN_SET: Menganggap senarai yang dibataskan sebagai tatasusunan berasaskan satu dan mengembalikan nilai pada 'indeks' tertentu.

Maklumat Tambahan:

  • Jadual integerseries ialah jadual yang mengandungi nombor dari 1 hingga had tertentu, digunakan untuk menjana baris 'dinormalkan'.
  • Penyelesaian ini menyediakan pendekatan generik untuk mengendalikan item senarai yang dibataskan dalam lajur MySQL, bukan hanya dalam konteks contoh khusus yang disediakan .

Atas ialah kandungan terperinci Bolehkah saya Sertai pada \';\' Nilai Terpisah dalam Lajur MySQL Tanpa Menggunakan Bahasa Luaran?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan