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

cải thiện truy vấn bài viết liên quan đến MySQL

Trước hết, xin lỗi rằng tôi đã thay đổi tên bảng một chút thành messagemessage_tag để dễ đọc.

Thứ hai, tôi đã không kiểm tra điều này. Sử dụng nó như một con trỏ hơn là một câu trả lời xác định.

Truy vấn sử dụng hai truy vấn con, có thể không hiệu quả lắm, có lẽ vẫn còn chỗ để cải thiện. Đầu tiên, truy vấn trong cùng tìm kiếm các thẻ của thư hiện tại. Sau đó, truy vấn giữa sẽ tìm kiếm các thư được đánh dấu bằng ít nhất một thẻ chung. Việc nhóm được sử dụng để lấy message_id duy nhất và sắp xếp chúng theo số lượng thẻ chung. Cuối cùng, JOIN được sử dụng để tải các chi tiết bổ sung và lọc ra các tin nhắn cũ.

Bạn có thể nhận thấy tôi đã sử dụng dấu chấm hỏi thay vì '$xyz' . Điều này là để tránh quan tâm đến việc thoát nội dung biến.

SELECT message_id, title, date
FROM message
RIGHT JOIN (SELECT message_id, COUNT(*)
            FROM message_tag
            WHERE tag_id IN 
                (SELECT MT.tag_id FROM message_tag MT WHERE MT.message_id = ?)
            GROUP BY message_id
            ORDER BY COUNT(*) DESC) RELATED_MESSAGES
            ON message.message_id = RELATED_MESSAGES.message_id
WHERE date < ?


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cơ sở dữ liệu trong cơ sở dữ liệu (thiết kế bảng)

  2. vấn đề nhiều cơ sở dữ liệu php

  3. MYSQL:Chèn bản ghi nếu nó đã tồn tại bản ghi cập nhật

  4. Kiểm tra bảng xem có trùng thời gian không?

  5. Cloud SQL hoặc VM Instance để lưu trữ Cơ sở dữ liệu MySQL