Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menyoal Satu Item Rawak dengan Cekap dari Setiap Kategori dalam MySQL?

Bagaimana untuk Menyoal Satu Item Rawak dengan Cekap dari Setiap Kategori dalam MySQL?

DDD
DDDasal
2024-12-28 00:23:09668semak imbas

How to Efficiently Query One Random Item from Each Category in MySQL?

Pertanyaan Item Rawak daripada Setiap Kategori MYSQL

Sistem pangkalan data menghadapi senario di mana memilih rekod rawak daripada setiap kategori adalah perkara biasa. Pertimbangkan pangkalan data dengan jadual Item yang mengandungi item yang tergolong dalam kategori berbeza, setiap satu dengan ID uniknya. Dan jadual Kategori yang berasingan menyediakan nama dan ID kategori.

Untuk memilih satu item rawak bagi setiap kategori, kami boleh memanfaatkan gabungan pengumpulan dan rawak.

Pertama, kami menyertai Item dan Jadual kategori pada ID kategori untuk mengaitkan item dengan kategori masing-masing:

SELECT
c.id AS cid, c.category, i.id AS iid, i.name
FROM categories c
INNER JOIN items i ON c.id = i.category

Ini menghasilkan keputusan set yang mengandungi semua item dengan maklumat kategori yang berkaitan.

Kini, untuk merawak pemilihan item, kami menambah ORDER BY RAND():

SELECT
c.id AS cid, c.category, i.id AS iid, i.name
FROM categories c
INNER JOIN items i ON c.id = i.category
ORDER BY RAND()

Untuk mengehadkan setiap kategori kepada satu item, kami gunakan separa KUMPULAN OLEH:

SELECT * FROM (
    SELECT
    c.id AS cid, c.category, i.id AS iid, i.name
    FROM categories c
    INNER JOIN items i ON c.id = i.category
    ORDER BY RAND()
) AS shuffled_items
GROUP BY cid

Pertanyaan ini secara berkesan mengumpulkan item yang disusun secara rawak mengikut ID kategori dan memilih item pertama dalam setiap kumpulan. Operasi pengumpulan berlaku sebelum pengisihan, jadi susunan rawak dikekalkan dalam setiap kategori.

Atas ialah kandungan terperinci Bagaimana untuk Menyoal Satu Item Rawak dengan Cekap dari Setiap Kategori dalam MySQL?. 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