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).
-
Sebelum Anda memutuskan tabel mana yang akan dituju, untuk melayani kueri Anda, Anda perlu memutuskan apa yang Anda inginkan untuk struktur kumpulan hasil Anda.
-
Kemudian batasi (baris mana) dengan
WHERE
klausa. -
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
-
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
.
-
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 menggunakanGROUP BY
, ajukan pertanyaan.
.
- berhenti menggunakan
-
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 ?
.
- 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 ?
- 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.