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

Tham gia DQL của Doctrine trên các cột có thể trống

Giải pháp 1:Doctrine Native SQL

Một cách để đạt được điều này là sử dụng các truy vấn MySQL gốc. Điều này yêu cầu sử dụng SQL gốc củaDoctrine tính năng và ánh xạ các kết quả của truy vấn bằng ResultSetMapping .

Tôi đã gặp sự cố khi thực thi truy vấn SQL gốc hai lần (với các tham số khác nhau), tập hợp kết quả của truy vấn thứ hai giống với tập hợp đầu tiên. Bài đăng sau trên GitHub đã giải quyết vấn đề này cho tôi.

Giải pháp 2:Sử dụng trình tối ưu hóa nội bộ của MySQL

Sử dụng điều kiện kết hợp sau sẽ sử dụng trình tối ưu hóa nội bộ của MySQL và coi đây là ref_or_null kiểu tham gia

SELECT a.*, b.* 
FROM a
   INNER JOIN b ON 
       a.column = b.column 
       OR (a.column IS NULL AND b.column IS NULL)

Sau đó, có thể sử dụng điều kiện nối này trong DQL, điều kiện này sẽ được dịch độc đáo trong SQL để được tối ưu hóa.

Giải pháp 3:Viết hàm DQL tùy chỉnh

Tôi đã viết một hàm DQL tùy chỉnh được dịch trong mệnh đề sau:

SELECT a.*, b.* 
FROM a
   INNER JOIN b ON (a.column <=> b.column) = 1

Rất tiếc là không thể loại bỏ = 1 một phần của điều khoản này. Điều này đã hiệu quả, nhưng gây ra một chính tác động đến hiệu suất đối với truy vấn của tôi:17 giây so với 0,5 giây, để đưa ra một số dấu hiệu (phi khoa học).
Vì vậy, tôi đã không đi xa hơn con đườ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. Django 1,7 cuộc di cư dài không bao giờ kết thúc

  2. Lưu trữ hiệu quả 7.300.000.000 hàng

  3. Làm thế nào để tạo trang mới trong plugin wordpress?

  4. Chuyển đổi chuỗi md5 được lưu trữ thành giá trị thập phân trong MySQL

  5. Cách nhận kỷ lục tuần khôn ngoan trong mysql từ ngày bắt đầu đến ngày kết thúc