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

sql заявка за определяне на най-сходните стоки по тагове

Тази заявка ще върне всички елементи, които имат максималния брой общи тагове:

SET @item = 1;

SELECT
  goods_id
FROM
  links
WHERE
  tag_id IN (SELECT tag_id FROM links WHERE [email protected])
  AND [email protected]
GROUP BY
  goods_id
HAVING
  COUNT(*) = (
    SELECT
      COUNT(*)
    FROM
      links
    WHERE
      tag_id IN (SELECT tag_id FROM links WHERE [email protected])
      AND [email protected]
    GROUP BY
      goods_id
    ORDER BY
      COUNT(*) DESC
    LIMIT 1
  )

Моля, вижте fiddle тук .

Или този ще върне всички елементи, дори тези без общи тагове, подредени по броя на таговете в общото описание:

SELECT
  goods_id
FROM
  links
WHERE
  [email protected]
GROUP BY
  goods_id
ORDER BY
  COUNT(CASE WHEN tag_id IN (SELECT tag_id FROM links WHERE [email protected]) THEN 1 END) DESC;


  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 сортиране по брой събития

  2. Няма грешка в избора на база данни дори след като е избран db

  3. CONCAT в съхранена процедура връща нула

  4. PHP:PDO заявката не връща резултати, но същата заявка връща 4 резултата в phpmyadmin?

  5. Създавайте и актуализирайте програмно структурата на базата данни