Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak dopasować rekordy, które są powiązane z określonym zestawem innych rekordów?

Jest kilka sposobów na osiągnięcie tego, jednym z nich jest pogrupowanie wyników i użycie HAVING porównać liczbę różnych tagów

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

Spowoduje to wybranie tylko tych użytkowników, którzy mają dwa różne tagi, którymi mogą być tylko Tag1 i Tag2 ponieważ są to jedyne, które są dołączane. W przypadku name kolumna jest unikalna, zamiast tego możesz liczyć na klucz podstawowy.

IN przy okazji jest zasadniczo taki sam jak Twój OR warunki (system bazy danych rozwinie IN do OR odpowiednie warunki).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pobieranie ostatniej notatki (według sygnatury czasowej) w pojedynczym zapytaniu z tabeli 1:n

  2. MySQL SUM() podając nieprawidłową sumę

  3. MySQL:DATE_ADD

  4. Obróć zestaw wyników mysql i utwórz tabelę/macierz html

  5. python - Problem z przechowywaniem znaków Unicode w MySQL za pomocą Django