Pertanyaan SQL untuk Mendapatkan Data Pelanggan dan Pembelian Terkini
Cabaran:
Dapatkan semula butiran pelanggan dan pembelian terbaharu mereka dengan berkesan menggunakan penyata SQL tunggal, diberikan jadual pelanggan dan jadual pembelian dengan perhubungan satu dengan ramai (satu pelanggan boleh mempunyai beberapa pembelian).
Pendekatan:
Penyelesaian optimum melibatkan operasi JOIN yang digabungkan dengan subkueri untuk menentukan tarikh pembelian terbaharu untuk setiap pelanggan. Ini memastikan ketepatan dan pelaksanaan pertanyaan yang cekap:
<code class="language-sql">SELECT c.*, p1.* FROM customer c JOIN purchase p1 ON (c.id = p1.customer_id) LEFT OUTER JOIN purchase p2 ON (c.id = p2.customer_id AND p1.date < p2.date) WHERE p2.date IS NULL;</code>
Pengoptimuman Prestasi:
Pengindeksan: Mencipta indeks komposit pada jadual purchase
yang merangkumi lajur (customer_id, date, id)
meningkatkan prestasi dengan ketara. Ini membolehkan pangkalan data menggunakan indeks penutup dengan cekap semasa sambungan luar.
Penormalan Data: Semasa menambah butiran pembelian terakhir terus pada jadual customer
(penyahnormalan) mungkin kelihatan lebih pantas untuk kes tertentu, ia memperkenalkan lebihan dan masalah integriti data yang berpotensi. Mengekalkan struktur satu-ke-banyak yang dinormalkan dan menggunakan pertanyaan SQL yang cekap kekal sebagai pendekatan yang disyorkan.
HAD 1 (Awas): Menggunakan LIMIT 1
memudahkan pertanyaan hanya jika lajur purchase
jadual id
sememangnya disusun mengikut tarikh. Walau bagaimanapun, bergantung pada LIMIT 1
tanpa pesanan terjamin boleh membawa kepada hasil yang tidak tepat jika sisipan data tidak dipesan secara konsisten mengikut tarikh atau lajur lain yang berkaitan. Penyelesaian yang disediakan adalah lebih mantap dan mengendalikan pelbagai senario pesanan data.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Maklumat Pelanggan dan Pembelian Terkini Mereka Menggunakan SQL dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!