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

SQL списък с етикети и филтриране на етикети

left join tags таблица и включете търсения идентификатор в клаузата за присъединяване и проверете за броя в having .

SELECT u.id,u.name,GROUP_CONCAT(ut.tagid) as tags
FROM users u 
LEFT JOIN usertag as ut ON u.id = ut.userid 
LEFT JOIN tags t ON t.id=ut.tagid AND t.ID IN (10,20,30) --change this as needed
GROUP BY u.id,u.name
HAVING COUNT(ut.tagid) >= COUNT(t.id) AND COUNT(t.id) = 3 --change this number to the number of tags

Още една опция е да използвате FIND_IN_SET ако има ограничени стойности. Например,

SELECT * FROM (
SELECT u.*, GROUP_CONCAT(ut.tagid) as tags 
FROM users as u 
LEFT JOIN usertag as ut ON u.id = ut.userid 
GROUP BY u.id
) T
WHERE FIND_IN_SET('10',tags) > 0 AND FIND_IN_SET('20',tags) > 0



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. LOAD_FILE връща NULL

  2. Как да изберем оптимизирани типове данни за колони [специфични за innodb]?

  3. Свържете се с mysql в докер контейнер от хоста

  4. MySQL ПРИСЪЕДИНЕТЕ само най-новия ред?

  5. Преструктуриране на лоша база данни с PHP цикли или MySQL