Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да съпоставим записи, които са свързани с определен набор от други записи?

Има няколко начина да постигнете това, единият е да групирате резултатите и да използвате HAVING за да сравните броя на отделните тагове

$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')
    ]);

Това ще избере само онези потребители, които имат два различни маркера, които могат да бъдат само Tag1 и Tag2 тъй като те са единствените, които се присъединяват. В случай, че name колоната е уникална, вместо това можете да разчитате на първичния ключ.

IN между другото по същество е същото като вашето OR условия (системата на базата данни ще се разшири IN до OR условия съответно).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ГРЕШКА 1366 (HY000):Неправилна стойност на низа:„\xF0\x9F\x98\x9C“ за колона „коментар“ на ред 1

  2. Как да се справяме с изключенията на PDO

  3. Трябва ли таблиците за свързване да имат повече от един първичен ключ от друга идентифицираща таблица?

  4. Как да инсталирате MySQL 8 на Windows

  5. Използване на .php файл за генериране на дъмп на MySQL