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

MySQL Wybierz gdzie w wielu do wielu

Zakładając, że chcesz czegoś więcej niż tylko identyfikatora artykułu:

SELECT a.id
      ,a.other_stuff
  FROM articles a
  JOIN article_category ac
    ON ac.article_id = a.id
GROUP BY a.id
HAVING GROUP_CONCAT(DISTINCT ac.category_id ORDER BY ac.category_id SEPARATOR ',') = '1,2'

Jeśli potrzebujesz tylko identyfikatora artykułu, spróbuj tego:

SELECT article_id
  FROM article_category 
GROUP BY article_id
HAVING GROUP_CONCAT(DISTINCT category_id ORDER BY category_id SEPARATOR ',') = '1,2'

Zobacz w akcji na http://sqlfiddle.com/#!2/9d213/4

Należy również dodać, że zaletą tego podejścia jest możliwość obsługi sprawdzania dowolnej liczby kategorii bez konieczności zmiany zapytania. Po prostu ustaw '1,2' jako zmienną łańcuchową i zmień to, co jest przekazywane do zapytania. Możesz więc równie łatwo wyszukiwać artykuły z kategoriami 1, 2 i 7, przekazując ciąg „1,2,7”. Nie są potrzebne żadne dodatkowe połączenia.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:optymalny indeks między zapytaniami

  2. Czy MySQL używa indeksu do sortowania?

  3. MySQL:Zwróć tylko ostatnią wiadomość w tabeli wiadomości płaskich/konwersacji

  4. Jak zaktualizować zestaw identyfikatorów od 1?

  5. SELECT * FROM people WHERE user_id='$user_id' ORDER BY time GROUP BY nazwisko