Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm việc xung quanh giới hạn 61 bảng JOIN trong MySQL bằng cách lồng các truy vấn con vào nhau

Bạn nói đúng rằng việc kết hợp quá nhiều thuộc tính thông qua một thiết kế EAV có khả năng vượt quá giới hạn của các phép nối. Ngay cả trước đó, có thể có một giới hạn thực tế của các phép nối vì chi phí của rất nhiều phép nối ngày càng cao hơn về mặt hình học. Mức độ tồi tệ của điều này phụ thuộc vào dung lượng máy chủ của bạn, nhưng nó có thể sẽ thấp hơn 61 một chút.

Vì vậy, việc truy vấn mô hình dữ liệu EAV để tạo ra kết quả như thể nó được lưu trữ trong mô hình quan hệ thông thường (một cột cho mỗi thuộc tính) là một vấn đề.

Giải pháp:đừng làm điều đó với một phép nối cho mỗi thuộc tính, có nghĩa là bạn không thể mong đợi tạo ra kết quả ở định dạng hàng cho mỗi thực thể thông thường hoàn toàn bằng SQL.

Tôi không rành về lược đồ Magento, nhưng tôi có thể suy ra từ truy vấn của bạn rằng một thứ như thế này có thể hoạt động:

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,...) vị từ là nơi bạn chỉ định nhiều thuộc tính. Không cần thêm nhiều liên kết để nhận thêm thuộc tính. Chúng chỉ được trả về dưới dạng hàng chứ không phải cột.

Điều này có nghĩa là bạn phải viết mã ứng dụng để tìm nạp tất cả các hàng của tập kết quả này và ánh xạ chúng thành các trường của một đối tượng.

Từ nhận xét của @Axel, có vẻ như Magento cung cấp các hàm trợ giúp để thực hiện việc tiêu thụ tập kết quả và ánh xạ nó thành một đối tượng.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để truy vấn các trường chứa một văn bản nhất định trong MySQL?

  2. Node.js trả về kết quả từ truy vấn MySQL

  3. Cách tính chênh lệch giữa hai ngày trong tháng trong MySQL

  4. Làm cách nào để kết hợp mờ tên công ty trong MYSQL với PHP để tự động hoàn thành?

  5. Lỗi:Phương pháp hoặc hoạt động không được triển khai. trong khi Cơ sở dữ liệu MYSQL giàn giáo