Menggabungkan Berbilang Baris Anak menjadi Satu Baris Induk dalam MySQL
Apabila berurusan dengan jadual berstruktur yang mempunyai data bersarang, ia boleh berguna untuk menggabungkan berbilang baris anak ke dalam baris induk tunggal untuk memberikan paparan data yang lebih teragregat. Satu senario biasa di mana ini diperlukan ialah apabila bekerja dengan sistem pengurusan pesanan, seperti yang ditunjukkan dalam contoh yang diberikan.
Pertimbangkan dua jadual: Ordered_Item dan Ordered_Options. Jadual Ordered_Item mewakili item yang dipesan, manakala jadual Ordered_Options termasuk butiran tambahan atau pilihan yang dikaitkan dengan setiap item yang dipesan. Matlamatnya adalah untuk mengeluarkan pertanyaan yang menggabungkan lajur Item_Name daripada jadual Item_Pesanan dengan nilai pilihan yang sepadan daripada jadual Ordered_Options, dikumpulkan dalam susunan tertentu dan dipisahkan dengan koma.
Satu penyelesaian yang berkesan ialah menggunakan GROUP_CONCAT MySQL fungsi, yang menggabungkan nilai daripada berbilang baris, dikumpulkan mengikut lajur tertentu. Pertanyaan di bawah mencapai hasil yang diingini:
SELECT ordered_item.id AS `Id`, ordered_item.Item_Name AS `ItemName`, GROUP_CONCAT(Ordered_Options.Value) AS `Options` FROM ordered_item JOIN ordered_options ON ordered_item.id = ordered_options.ordered_item_id GROUP BY ordered_item.id
Pertanyaan ini akan menghasilkan output berikut:
Id ItemName Options 1 Pizza Pepperoni,Extra Cheese 2 Stromboli Extra Cheese
Fungsi GROUP_CONCAT memastikan bahawa nilai pilihan digabungkan menjadi satu rentetan dan mengekalkan susunan pilihan berdasarkan lajur Option_Number mereka. Kaedah ini sangat cekap dan boleh mengendalikan sejumlah besar pilihan tanpa memerlukan penyelesaian statik atau sebarang kerumitan tambahan dalam pertanyaan.
Untuk mengendalikan kes di mana hasil gabungan melebihi panjang maksimum lalai 1024 aksara, MySQL menyediakan pembolehubah group_concat_max_len. Menetapkan pembolehubah ini kepada nilai yang lebih tinggi, seperti yang ditunjukkan di bawah, akan menampung rentetan bercantum yang lebih besar:
SET SESSION group_concat_max_len = 8192;
Atas ialah kandungan terperinci Bagaimana untuk Menggabungkan Berbilang Baris Anak menjadi Baris Induk Tunggal dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!