sql >> Database >  >> RDS >> Mysql

sql-query om de meest vergelijkbare goederen te bepalen door middel van tags

Deze zoekopdracht retourneert alle items die het maximale aantal tags gemeen hebben:

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
  )

Zie fiddle hier .

Of deze retourneert alle items, zelfs die zonder gemeenschappelijke tags, gerangschikt op het aantal tags gemeenschappelijk desc:

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. MySQL denkt dat subquery wordt afgeleid terwijl dat niet zo is!

  2. php gebruiken om GROUP_CONCAT('column x') waarden te retourneren

  3. Hoe de volgende auto-increment-id in mysql te krijgen

  4. Hoe bestanden te verwijderen in SQL Server 2019