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

Kelompokkan hasil mysql berdasarkan kategori dan tampilkan ke dalam grup di bawah setiap kategori

Saya akan menggunakan ORDER BY category sebagai gantinya. Anda kemudian dapat mengulangi set hasil seperti

$old = null;
foreach ($st as $s) {
  if $old != $s['id']
    echo 'Main category';
    $old = $s['id'];
  echo 'subcategory'

Perbarui

Ada tiga kemungkinan solusi sampai sekarang di utas ini untuk masalah itu sendiri.

Opsi awal 1

SELECT * FROM content group by category
foreach
  SELECT * FROM content WHERE category=$cat['category']

Jika seseorang hanya ingin mendapatkan setiap kategori induk sekali, ia harus menggunakan DISTINCT sebagai gantinya. Seseorang tidak boleh menggunakan GROUP BY tanpa menggunakan fungsi agregasi. Menggabungkan GROUP BY dengan SELECT * terbatas pada (kebanyakan) MySQL. Anda tidak dapat memilih kolom sembarang dalam kasus ini di ASNI SQL.

Varian opsi 1

SELECT DISTINCT category FROM content ORDER BY category
foreach
  SELECT * FROM content WHERE category=$cat['category']

Ini adalah versi yang dikoreksi dengan DISTINCT bukannya GROUP BY .

Masih kekurangan panggilan kueri bersarang. Untuk 5 kategori induk, ini mengarah ke 5 kueri dalam loop. Untuk 10 kategori induk, sudah ada 10 kueri di dalamnya. Seseorang harus menghindari pertumbuhan semacam ini secara umum.

Opsi 3

SELECT * FROM content ORDER BY category, menu_name

dapat digunakan dengan kode di atas.

Ini lebih disukai daripada opsi lain yang ditampilkan karena alasan yang berbeda:

  • Anda hanya memerlukan satu kueri database untuk mengumpulkan semua data sekaligus. Basis data menghabiskan (pada kueri mudah) sebagian besar waktunya untuk menguraikan pernyataan SQL yang disediakan dan hanya sebagian kecil waktu untuk benar-benar mengumpulkan data yang Anda minta. Jika Anda menyediakan banyak kode SQL, itu harus menghabiskan banyak waktu untuk menguraikannya. Jika Anda memberikan lebih sedikit kode, itu berarti lebih sedikit yang harus dilakukan.
  • Lebih mudah bagi database untuk mendapatkan data satu kali, mengurutkannya sekali dan mengembalikannya kepada Anda sekali, daripada mengumpulkan bagian, mengurutkan bagian, mengembalikan bagian dan memulai dari awal lagi.

pilihan 4 yang masih belum disebutkan

Ada solusi lebih lanjut yang sampai sekarang tidak disebutkan. Seseorang dapat menggunakan pernyataan yang disiapkan, siapkan SQL sekali dan jalankan dengan id yang berbeda. Ini masih akan menanyakan semua kategori di dalam loop, tetapi akan menghindari keharusan untuk mengurai kode SQL setiap saat.

Sebenarnya saya tidak tahu apakah ini lebih baik atau lebih buruk (atau di antaranya) daripada solusi saya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. HAPUS DARI MEMILIKI COUNT(*) di MySQL

  2. MySQL pilih tempat yang tidak ada di tabel

  3. PHP tidak dapat menyelesaikan nama wadah mysql dalam keadaan tertentu

  4. Apa yang dimaksud dengan INT(5) di mysql?

  5. Bagaimana menemukan tabel terbesar di database MySQL?