Soalan:
Saya mempunyai data dalam berbilang jadual yang perlu saya sertai berdasarkan ';' (titik bertitik) memisahkan nilai dalam lajur. Saya tidak boleh menggunakan PHP atau mana-mana bahasa lain untuk memanipulasi keputusan. Adakah terdapat cara untuk mencapai ini hanya menggunakan MySQL?
Jawapan:
Ya, adalah mungkin untuk menyertai pada ';' nilai dipisahkan dalam lajur menggunakan MySQL tulen. Di bawah ialah penjelasan terperinci penyelesaian:
Menukar Rentetan Terhad kepada Baris
Kuncinya ialah menukar ';' rentetan terhad kepada satu siri baris. Ini boleh dicapai menggunakan langkah berikut:
Pertanyaan untuk Menormalkan Jadual Sumber_Pengguna
<code class="sql">SELECT user_resource.user, user_resource.resources, COUNT_IN_SET(user_resource.resources, ';') AS resources_count, isequence.id AS resources_index, VALUE_IN_SET(user_resource.resources, ';', isequence.id) AS resources_value FROM user_resource JOIN integerseries AS isequence ON isequence.id <= COUNT_IN_SET(user_resource.resources, ';') ORDER BY user_resource.user, isequence.id</code>
Menyertai Jadual Ternormal dengan Jadual Sumber
Setelah jadual sumber_pengguna dinormalkan, ia boleh dicantumkan dengan jadual sumber untuk mendapatkan hasil yang diingini.
<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>
Sampel Input dan Output
Jadual sumber_pengguna:
user | resources |
---|---|
user1 | 1;2;4 |
user2 | 2 |
user3 | 3;4 |
Jadual sumber:
id | data |
---|---|
1 | data1 |
2 | data2 |
3 | data3 |
4 | data4 |
5 | data5 |
Jadual_sumber_pengguna biasa:
user | resources | resources_count | resources_index | resources_value |
---|---|---|---|---|
user1 | 1;2;4 | 3 | 1 | 1 |
user1 | 1;2;4 | 3 | 2 | 2 |
user1 | 1;2;4 | 3 | 3 | 4 |
user2 | 2 | 1 | 1 | 2 |
user3 | 3;4 | 2 | 1 | 3 |
user3 | 3;4 | 2 | 2 | 4 |
Output (Keputusan Menyertai):
user | data |
---|---|
user1 | data1 |
user1 | data2 |
user1 | data4 |
user2 | data2 |
Atas ialah kandungan terperinci Bolehkah saya Menyertai Jadual dalam MySQL Berdasarkan Nilai yang Dipisahkan oleh Titik Bertitik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!