Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment faire correspondre des enregistrements associés à un ensemble spécifique d'autres enregistrements ?

Il y a plusieurs façons d'y parvenir, l'une serait de regrouper les résultats et d'utiliser HAVING pour comparer le nombre de balises distinctes

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

Cela sélectionnera uniquement les utilisateurs qui ont deux balises distinctes, qui ne peuvent être que Tag1 et Tag2 puisque ce sont les seuls qui sont joints. Au cas où le name colonne est unique, vous pouvez compter sur la clé primaire à la place.

Le IN d'ailleurs. est essentiellement le même que votre OR conditions (le système de base de données développera IN à OR conditions en conséquence).