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

Làm cách nào để đối sánh các bản ghi được liên kết với một tập hợp cụ thể của các bản ghi khác?

Có một số cách để đạt được điều này, một là nhóm các kết quả và sử dụng HAVING để so sánh số lượng các thẻ riêng biệt

$query = $this->Users
    ->find()
    ->matching('Tags', function ($query) {
        return $query->where(['Tags.name IN' => ['Tag1', 'Tag2']]);
    })
    ->group('Users.id')
    ->having([
        $this->Users->query()->newExpr('COUNT(DISTINCT Tags.name) = 2')
    ]);

Thao tác này sẽ chỉ chọn những người dùng có hai thẻ riêng biệt, chỉ có thể là Tag1Tag2 vì đây là những cái duy nhất đang được tham gia. Trong trường hợp name là duy nhất, bạn có thể dựa vào khóa chính để thay thế.

IN btw. về cơ bản giống với OR của bạn điều kiện (hệ thống cơ sở dữ liệu sẽ mở rộng IN thành OR điều kiện phù hợp).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tham gia hai bảng MySQL với PHP

  2. mysql PDO cách liên kết LIKE

  3. Tính toán kích thước vùng đệm InnoDB cho Máy chủ MySQL của bạn

  4. Giới thiệu về các kiểu dữ liệu SQL

  5. Mật khẩu mặc định của mysql trong máy chủ ubuntu 16.04