Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk Menyertai Data daripada Berbilang Jadual dengan Nilai Terhad dalam MySQL Tanpa Memautkan Jadual?

Bagaimana untuk Menyertai Data daripada Berbilang Jadual dengan Nilai Terhad dalam MySQL Tanpa Memautkan Jadual?

Patricia Arquette
Patricia Arquetteasal
2024-11-01 09:31:30880semak imbas

How to Join Data from Multiple Tables with Delimited Values in MySQL Without Linking Tables?

Menyertai Data daripada Berbilang Jadual Menggunakan Nilai Terhad dalam MySQL

Soalan:

Bagaimana boleh Saya cekap mendapatkan data daripada berbilang jadual yang mempunyai nilai dipisahkan koma bertitik dalam salah satu lajur, tanpa menggunakan bahasa luar atau memperkenalkan jadual pemautan?

Jawapan:

Kepada menangani isu ini, kita boleh menggunakan teknik yang menukar nilai yang dipisahkan koma bertitik ke dalam baris individu. Ini membolehkan kami menyertai jadual dan mendapatkan hasil yang diingini.

Penyelesaian:

Penyelesaian yang disediakan menggunakan dua fungsi MySQL tersuai:

  • COUNT_IN_SET(timbunan jerami, delim): Mengembalikan kiraan item yang dipisahkan aksara dalam rentetan tertentu.
  • VALUE_IN_SET(timbunan jerami, delim, yang): Merawat senarai yang dibataskan sebagai tatasusunan dan mendapatkan semula nilai pada indeks tertentu (yang).

Fungsi ini digabungkan dengan gabungan antara jadual pengguna dan sumber, menggunakan jadual integerseries untuk mengulang melalui koma bertitik- nilai dipisahkan:

<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, ';') /* normalize */

     JOIN resource 
       ON resource.id = VALUE_IN_SET(user_resource.resources, ';', isequence.id)      
ORDER BY
       user_resource.user,  resource.data</code>

Pertanyaan ini menghasilkan jadual di mana setiap sumber pengguna diwakili sebagai baris individu, membolehkan kami bergabung dengan jadual sumber dengan mudah untuk mendapatkan data yang sepadan.

Maklumat Tambahan:

  • Jadual integerseries mengandungi urutan nilai yang digunakan untuk menormalkan senarai yang dipisahkan.
  • Fungsi COUNT_IN_SET dan VALUE_IN_SET boleh digunakan semula dalam senario lain senarai terhad perlu diproses.
  • Untuk pangkalan data SQLite, penyelesaian serupa tersedia: https://stackoverflow.com/a/24750820/302036

Atas ialah kandungan terperinci Bagaimana untuk Menyertai Data daripada Berbilang Jadual dengan Nilai Terhad dalam MySQL Tanpa Memautkan Jadual?. 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