MySQL - Pilih Rekod Rawak

Pengenalan

Hai sana, para ahli pangkalan data masa depan! Hari ini, kita akan melangkah ke dalam dunia MySQL dan belajar bagaimana untuk memilih rekod rawak. Sebagai pandu yang dapat dipercayai dengan tahun pengalaman pengajaran, saya berjanji untuk menjadikan petualangan ini sia-sia dan menyenangkan. Jadi, pasangkan seatbelt Anda dan mari kita masuk ke dalam!

MySQL - Select Random Records

Memilih Rekod Rawak dalam MySQL

Adakah anda pernah bertanya-tanya bagaimana laman web menunjukkan petikan atau fakta rawak? Atau bagaimana permainan online memilih pemain secara rawak untuk pertandingan? Well, sahabat saya, ilmu often berada dalam pangkalan data, dan MySQL menyediakan alat kuat untuk mencapai kesan ini.

Memilih rekod rawak adalah tugas biasa dalam pengurusan pangkalan data, dan ia terutama berguna ketika anda hendak:

  • Menunjukkan kandungan rawak kepada pengguna
  • Membuat set data ujian untuk pengujian
  • Menerapkan pemilihan rawak dalam permainan atau kuis

Mari kita mulai dari dasar dan maju ke teknik yang lebih maju.

Fungsi MySQL RAND()

Pada hati perjalanan pemilihan rawak kita adalah fungsi MySQL RAND(). Gem ini menghasilkan nilai pecahan rawak antara 0 dan 1.

Ini adalah contoh yang mudah:

SELECT RAND();

Jika anda menjalankan pertanyaan ini beberapa kali, anda akan mendapat hasil yang berbeza setiap kali, seperti:

0.123456789
0.987654321
0.555555555

Sekarang, mari lihat bagaimana kita boleh menggunakan RAND() untuk memilih rekod rawak dari jadual. Bayangkan kita ada jadual yang dipanggil famous_quotes dengan kolom id, author, dan quote.

SELECT * FROM famous_quotes ORDER BY RAND() LIMIT 1;

Pertanyaan ini membuatkan:

  1. Memilih semua kolom dari jadual famous_quotes
  2. Mengurutkan hasil secara rawak menggunakan ORDER BY RAND()
  3. Menghadkan output kepada hanya satu rekod dengan LIMIT 1

Hasilnya mungkin kelihatan seperti ini:

| id | author           | quote                                        |
|----|------------------|----------------------------------------------|
| 42 | Douglas Adams    | Jangan Panik!                                |

Setiap kali anda menjalankan pertanyaan ini, anda akan mendapat petikan rawak yang berbeza. Bukan itu menarik?

LIMIT dengan Fungsi RAND()

Apa jika kita mahu lebih daripada satu rekod rawak? Mudah-mudahan! Kita hanya perlu mengubah klausa LIMIT. Mari kitaambil 3 petikan rawak:

SELECT * FROM famous_quotes ORDER BY RAND() LIMIT 3;

Ini mungkin memberikan kita:

| id | author           | quote                                        |
|----|------------------|----------------------------------------------|
| 17 | Oscar Wilde      | Jadi dirimu sendiri; siapa lain sudah dipilih. |
| 53 | Mark Twain       | Rahsia untuk maju adalah untuk mula. |
| 8  | Albert Einstein  | Imajinasi lebih penting daripada pengetahuan. |

Ingat, setiap kali anda menjalankan pertanyaan ini, anda akan mendapat set rawak 3 petikan yang berbeza. Itu seperti mencicipi dalam pangkalan data!

Catatan Peringatan

Walaupun ORDER BY RAND() adalah mudah dan berkesan, ia boleh lambat pada jadual besar. Ini kerana MySQL perlu menghasilkan nombor rawak untuk setiap baris dan kemudian mengurutkan semua nombor ini. Untuk jadual kecil hingga sederhana, ia sepenuhnya baik, tetapi untuk set data yang besar, kita mungkin perlu kaedah yang lebih optimal.

Rekod Rawak Menggunakan Program Klien

Kadang-kadang, ia lebih efektif untuk memilih rekod rawak menggunakan bahasa pengaturcaraan klien. Berikut adalah bagaimana anda mungkin membuatnya dalam beberapa bahasa pengaturcaraan yang berbeza:

Python

import mysql.connector
import random

# Sambung ke pangkalan data
cnx = mysql.connector.connect(user='your_username', password='your_password',
host='127.0.0.1', database='your_database')
cursor = cnx.cursor()

# Dapatkan jumlah rekod keseluruhan
cursor.execute("SELECT COUNT(*) FROM famous_quotes")
total_records = cursor.fetchone()[0]

# Hasilkan offset rawak
random_offset = random.randint(0, total_records - 1)

# Ambil rekod rawak
cursor.execute(f"SELECT * FROM famous_quotes LIMIT 1 OFFSET {random_offset}")
random_quote = cursor.fetchone()

print(random_quote)

# Tutup sambungan
cnx.close()

PHP

<?php
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "your_database";

// Buat sambungan
$conn = new mysqli($servername, $username, $password, $dbname);

// Semak sambungan
if ($conn->connect_error) {
die("Sambungan gagal: " . $conn->connect_error);
}

// Dapatkan jumlah rekod keseluruhan
$sql = "SELECT COUNT(*) as total FROM famous_quotes";
$result = $conn->query($sql);
$row = $result->fetch_assoc();
$total_records = $row['total'];

// Hasilkan offset rawak
$random_offset = rand(0, $total_records - 1);

// Ambil rekod rawak
$sql = "SELECT * FROM famous_quotes LIMIT 1 OFFSET $random_offset";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
$row = $result->fetch_assoc();
echo "ID: " . $row["id"]. " - Penulis: " . $row["author"]. " - Petikan: " . $row["quote"];
} else {
echo "0 hasil";
}

$conn->close();
?>

Dalam kedua-dua contoh ini, kita:

  1. Sambung ke pangkalan data
  2. Dapatkan jumlah rekod keseluruhan
  3. Hasilkan offset rawak
  4. Gunakan LIMIT 1 OFFSET [nomber_rawak] untuk mengambil rekod rawak

Kaedah ini lebih efektif untuk jadual besar kerana ia tidak memerlukan pengurutan keseluruhan jadual.

Kesimpulan

Dan di situ anda ada, murid-murid yang sabar! Kita telah menjelajah pelbagai kaedah untuk memilih rekod rawak dalam MySQL, dari kaedah mudah ORDER BY RAND() hinggalah ke teknik pengaturcaraan klien yang lebih maju. Ingat, kaedah terbaik bergantung kepada kesertaan penggunaan anda dan saiz set data anda.

Sementara itu, ini adalah sedikit humor pangkalan data untuk anda: Mengapa pangkalan data pergi ke psikiater? Ia mempunyai terlalu banyak masalah hubungan! ?

Terus praktik, tetap curi-curi, dan segera anda akan menjadi ahli pengambilan rekod rawak dalam lingkaran pengaturcaraan anda. Sampaijumpa lagi, selamat mencari!

Credits: Image by storyset