Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

ambil catatan dengan klausa IN - memiliki nilai duplikat dalam klausa IN

Logikanya tidak mungkin untuk melakukan apa yang Anda inginkan, saya akan mencoba menjelaskan menggunakan pilihan pesanan Anda

 ORDER BY FIELD(`question_level`, 1, 2, 1, 2, 3, 2, 4, 2, 3, 3)

Jadi di sini kita ingin 1 lalu 2 lalu 1 lagi dari question_level . Sekarang di tabel Kami memiliki nilai-nilai ini. Saya akan menyibukkan diri hanya dengan question_level #1 yang saya butuhkan untuk menunjukkan maksud saya.

id   | question    | question_level
______________________________________
1    | abc         | 1
______________________________________
5    | qoindos     | 1
______________________________________

Seperti yang Anda lihat, kami memiliki baris untuk question_level=1 Sekarang bagaimana sistem memutuskan level mana 1 mana yang pertama dan mana yang kedua. Tidak ada cara untuk memutuskan bagaimana melakukan ini. Jadi terlepas dari Database yang gagal mengurutkannya seperti yang Anda inginkan. Tanpa lebih banyak informasi untuk membuat pilihan itu, tidak ada cara untuk membuat loop bahkan untuk mengurutkannya. Yang terbaik yang bisa Anda lakukan adalah mengurutkan berdasarkan kunci utama, dan kemudian levelnya. Yang kemungkinan besar harus Anda lakukan di sisi server.

Saya pikir kesalahan yang Anda buat di sini adalah, Anda perlu menggunakan ID unik pertanyaan yang sebenarnya, jika Anda memiliki batasan berapa banyak pertanyaan di setiap level maka itu perlu ditangani secara terpisah.

Semoga masuk akal.

Jika Anda mencoba memilih x jumlah pertanyaan acak di n tingkat yang bisa dikerjakan dengan cukup mudah. Misalnya jika Anda ingin

  • 2x pertanyaan di lv 1
  • 4x pertanyaan di lv 2
  • 3x pertanyaan di lv 3
  • 1x pertanyaan di lv 4.

Ini dapat diselesaikan dengan empat kueri sederhana untuk level tersebut, sambil menyortir secara acak pada bidang id dan menggunakan klausa batas yang sesuai untuk level tersebut. Omong-omong, ini adalah jumlah level dalam pertanyaan Anda.

JIKA Anda ingin memilih pertanyaan acak pada tingkat tertentu, Anda mungkin ingin melakukannya dengan subquery. RAND() memiliki beberapa penalti kinerja yang harus dapat Anda abaikan hanya dengan mengacak kunci utama dan kemudian bergabung di atas meja untuk menarik sisa data keluar setelah dipesan. Tapi, Anda harus membandingkannya.

Jadi contohnya adalah ini.

SELECT
    q1.*
FROM 
    tbl_questions AS q1
JOIN
(
    SELECT
        id
    FROM
        tbl_questions
    WHERE
        question_level = 1
    ORDER BY RAND() LIMIT 2
) AS q2 USING( id )

Meskipun saya harus mengakui bahwa saya belum pernah mencoba ini, hanya sebuah Ide yang saya miliki.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Membandingkan Waktu MySQL dan Java

  2. php mysql perintah UPDATE tidak akan diperbarui

  3. Tidak dapat terhubung ke server mysql dengan go and docker - tekan tcp 127.0.0.1:3306:sambungkan:koneksi ditolak

  4. Memahami Normalisasi &Duplikat - Sepertinya Saya Tidak - Menambahkan Id Artis &Judul

  5. SQL Query tidak menunjukkan hasil yang diharapkan