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

MySQL Chọn Vị trí Trong Nhiều đến Nhiều

Giả sử bạn muốn nhiều hơn chỉ là id của bài viết:

SELECT a.id
      ,a.other_stuff
  FROM articles a
  JOIN article_category ac
    ON ac.article_id = a.id
GROUP BY a.id
HAVING GROUP_CONCAT(DISTINCT ac.category_id ORDER BY ac.category_id SEPARATOR ',') = '1,2'

Nếu tất cả những gì bạn muốn là id của bài viết thì hãy thử điều này:

SELECT article_id
  FROM article_category 
GROUP BY article_id
HAVING GROUP_CONCAT(DISTINCT category_id ORDER BY category_id SEPARATOR ',') = '1,2'

Xem nó hoạt động tại http://sqlfiddle.com/#!2/9d213/4

Cũng cần nói thêm rằng ưu điểm của phương pháp này là nó có thể hỗ trợ việc kiểm tra bất kỳ số lượng danh mục nào mà không cần phải thay đổi truy vấn. Chỉ cần đặt '1,2' thành một biến chuỗi và thay đổi những gì được chuyển vào truy vấn. Vì vậy, bạn có thể dễ dàng tìm kiếm các bài báo có danh mục 1, 2 và 7 bằng cách chuyển một chuỗi '1,2,7'. Không cần kết hợp bổ sung.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thiết kế cơ sở dữ liệu MySQL với quốc tế hóa

  2. Khi nào thì một bảng chuyển từ MyISAM sang InnoDb?

  3. Câu lệnh cập nhật SQL có điều kiện cho hai bảng cùng một lúc

  4. Tôi có phải đề phòng việc tiêm SQL nếu tôi sử dụng trình đơn thả xuống không?

  5. Thứ tự MySQL theo nhóm trước