sql >> Database teknologi >  >> RDS >> Mysql

Hvordan matcher man poster, der er knyttet til et bestemt sæt af andre poster?

Der er et par måder at opnå dette på, en ville være at gruppere resultaterne og bruge HAVING for at sammenligne antallet af de forskellige tags

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

Dette vil kun vælge de brugere, der har to forskellige tags, som kun kan være Tag1 og Tag2 da disse er de eneste, der bliver tilsluttet. I tilfælde af name kolonnen er unik, kan du regne med den primære nøgle i stedet.

IN btw. er stort set det samme som din OR betingelser (databasesystemet udvider IN til OR betingelser i overensstemmelse hermed).




  1. Escape-streng til brug i MySQL fuldtekstsøgning

  2. tilpasset php-forum - viser nye/ulæste indlæg

  3. Levenshtein:MySQL + PHP

  4. Flere relationer mellem to enheder, er dette god praksis?