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

zapytanie sql, aby określić najbardziej podobne towary według tagów

To zapytanie zwróci wszystkie elementy, które mają maksymalną liczbę wspólnych tagów:

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
  )

Zobacz skrzypce tutaj .

Albo ten zwróci wszystkie elementy, nawet te bez wspólnych tagów, uporządkowane według liczby tagów we wspólnym opisie:

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. buforowanie PHP wyników sql

  2. Czy istnieje skrypt aktualizacji Spring Batch 3 dla MySQL?

  3. Wypełnianie pola kombi danymi mysql

  4. mysql zły przyrost kolumny

  5. Instrukcja case z warunkiem where w SQL