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

Mengatasi 61 tabel JOIN limit di MySQL dengan membuat subquery di dalam satu sama lain

Anda benar bahwa menggabungkan terlalu banyak atribut melalui desain EAV kemungkinan akan melebihi batas penggabungan. Bahkan sebelum itu, mungkin ada batasan praktis untuk bergabung karena biaya dari begitu banyak gabungan semakin tinggi dan semakin tinggi secara geometris. Seberapa buruk ini tergantung pada kapasitas server Anda, tetapi kemungkinan akan sedikit lebih rendah dari 61.

Jadi menanyakan model data EAV untuk menghasilkan hasil seolah-olah disimpan dalam model relasional konvensional (satu kolom per atribut) bermasalah.

Solusi:jangan lakukan dengan join per atribut, yang berarti Anda tidak dapat mengharapkan untuk menghasilkan hasil dalam format baris-per-entitas konvensional murni dengan SQL.

Saya tidak begitu akrab dengan skema Magento, tetapi saya dapat menyimpulkan dari pertanyaan Anda bahwa sesuatu seperti ini mungkin berhasil:

SELECT cpe.entity_id
, o.value AS option
, v.value AS option_value
FROM catalog_product_entity AS cpe
INNER JOIN catalog_product_entity_int AS i 
  ON cpe.entity_id = i.entity_id AND i.attribute_id IN (2,3,4)
INNER JOIN eav_attribute_option AS o 
  ON i.value = o.option_id AND i.attribute_id = o.attribute_id
INNER JOIN eav_attribute_option_value AS v
  ON v.option_id = o.option_id;

IN(2,3,4,...) predikat adalah tempat Anda menentukan beberapa atribut. Tidak perlu menambahkan lebih banyak gabungan untuk mendapatkan lebih banyak atribut. Mereka hanya dikembalikan sebagai baris, bukan kolom.

Ini berarti Anda harus menulis kode aplikasi untuk mengambil semua baris dari kumpulan hasil ini dan memetakannya ke dalam bidang objek tunggal.

Dari komentar oleh @Axel, sepertinya Magento menyediakan fungsi pembantu untuk melakukan konsumsi set hasil ini dan memetakannya ke dalam objek.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kesalahan mysql 1452 - Tidak dapat menambah atau memperbarui baris anak:batasan kunci asing gagal

  2. Bagaimana cara terhubung ke Database MySQL?

  3. Cara menampilkan gambar (tipe bolb) di halaman jsp dari mySql DB di Struts 2 menggunakan Hibernate

  4. Sambungan gagal:Akses ditolak untuk pengguna 'root'@'localhost' (menggunakan kata sandi:YA) dari fungsi php

  5. Bagaimana saya bisa mengatasi ketidakcocokan dengan sql_mode=only_full_group_by di laravel fasih?