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

Pilihan Bersarang Mysql

Saya telah menambahkan jawaban untuk pertanyaan sebelumnya, silakan lihat dulu, untuk pemahaman.

Anda tidak bisa mendapatkannya dari bb_ratings sendiri dengan mengelompokkannya dan meretasnya. Anda mendapatkan Null karena Anda berpikir dalam kerangka kisi, bukan himpunan relasional (itulah konsep utama Model Relasional).

  1. Sebelum Anda memutuskan tabel mana yang akan dituju, untuk melayani kueri Anda, Anda perlu memutuskan apa yang Anda inginkan untuk struktur kumpulan hasil Anda.

  2. Kemudian batasi (baris mana) dengan WHERE klausa.

  3. Kemudian cari tahu dari mana (tabel apa) untuk mendapatkan kolom. Entah bergabung ke lebih banyak tabel, dan lebih banyak pekerjaan di WHERE ayat; atau subkueri skalar, berkorelasi dengan kueri luar.

Anda tidak jelas tentang apa yang Anda inginkan. Sepertinya Anda menginginkan laporan yang sama seperti pertanyaan sebelumnya, ditambah kolom untuk suara pengguna yang diberikan. Bagi saya, struktur kumpulan hasil Anda adalah daftar buletin. Yah, saya bisa mendapatkannya dari bulletin , tidak perlu pergi ke bulletin_like dan kemudian harus mengelompokkannya.

Jika Anda berpikir dalam hal set, itu sangat mudah, tidak perlu melompati rintangan dengan tampilan material atau kueri "bersarang":

SELECT name AS bulletin, 
    (SELECT COUNT(like) 
        FROM  bulletin_like bl 
        WHERE bl.bulletin_id = b.bulletin_id 
        AND   like = 1
        ) AS like,
    (SELECT COUNT(like) 
        FROM  bulletin_like bl 
        WHERE bl.bulletin_id = b.bulletin_id 
        AND   like = 0
        ) AS dislike,
    (SELECT COUNT(like) 
        FROM  bulletin_like bl 
        WHERE bl.bulletin_id = b.bulletin_id 
        AND   bl.user_id = {$user_d}
        AND   like = 1
        ) AS your_vote
    FROM bulletin b

Tanggapan terhadap Komentar

Saya merasa bahwa apa yang Anda katakan sangat penting untuk cara saya mendekati SQL

  1. Ya, tentu saja. Jika Anda ingin mempelajari hal yang benar di awal, itu akan:

    • menyimpan segala macam masalah nanti
    • buat kueri Anda lebih efisien
    • memungkinkan Anda membuat kode lebih cepat
      .
  2. Untuk saat ini, lupakan penggunaan set hasil sebagai tabel (jauh lebih lambat), dan tabel temp (jelas tidak diperlukan jika database Anda dinormalisasi). Anda banyak lebih baik menanyakan tabel secara langsung. Anda perlu mempelajari berbagai mata pelajaran seperti model Relasional; cara menggunakan SQL; bagaimana tidak menggunakan SQL untuk menghindari masalah; dll. Saya bersedia membantu Anda, dan tinggal bersama Anda untuk sementara waktu, tetapi saya perlu tahu bahwa Anda bersedia. Ini akan membutuhkan sedikit bolak-balik. Ada sedikit gangguan di situs ini, jadi saya akan mengabaikan komentar lain (sampai akhir) dan hanya menanggapi komentar Anda.

    • berhenti menggunakan GROUP BY , ini sangat menghambat pemahaman Anda tentang SQL. Jika Anda tidak bisa mendapatkan laporan yang Anda inginkan tanpa menggunakan GROUP BY , ajukan pertanyaan.
      .
  3. Ini diposting pertanyaan. Beri tahu saya di titik mana Anda tersesat, dan saya akan memberikan detail lebih lanjut mulai saat itu.

    • Untuk pertanyaan ini, Anda menginginkan daftar buletin, dengan suka; tidak suka; dan disukai pengguna ini. Apakah itu benar ? Sudahkah Anda mencoba kode yang saya berikan ?
      .
  4. Melihat pertanyaan terkait. Ini berantakan, dan tidak ada yang membahas masalah yang lebih dalam; mereka telah menjawab masalah di permukaan, secara terpisah. Anda sekarang memiliki jawaban tetapi Anda tidak memahaminya. Itu adalah cara yang sangat lambat untuk maju.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengimpor File SQL 1GO => ERROR 2013 (HY000) pada baris 23:Koneksi terputus ke server MySQL selama kueri

  2. MySQL - nilai pengurangan otomatis

  3. Prioritas transaksi?

  4. Nama tabel atau panjang nama kolom memengaruhi kinerja?

  5. MySQL INSERT ... PADA DUPLICATE KEY UPDATE di Java:Cara Membedakan status Disisipkan/Diperbarui/NoChange