sql >> Database teknologi >  >> RDS >> Mysql

Søg efter matchende tags (Similarity Search) med MySQL og Constraints

SELECT  c.articleid, COUNT(*) AS ct
    FROM articletag AS b
    JOIN articletag AS c  ON c.tagid = b.tagid
                         AND c.articleid != b.articleid
    WHERE b.articleid = 123
    GROUP BY c.articleid
    ORDER BY ct DESC;

Når du søger efter, hvad der er "ligner" til 123 (punkt-B i dit eksempel), skal outputtet

Item-A, 2
Item-C, 1

Dette er en fuld scanning af articletag . Så følg tipsene i min diskussion af many:many mapping .

Hvis du har brug for at få information om artiklerne efter at have udført forespørgslen, så brug den som en 'afledt' tabel; for eksempel:

SELECT articles.*
    FROM ( the above SELECT ) AS x
    JOIN articles USING(articleid)
    ORDER BY x.ct DESC;

(Du kan fjerne ORDER BY fra den indre forespørgsel, da den vil blive ignoreret frem for den ydre ORDER BY .)




  1. SQL-reserverede nøgleord, der forårsager fejl under import af data fra tekstfil

  2. hash en SQL række?

  3. Sådan fungerer SQLite Max()

  4. Slet rækker fra tabel, undtagen angivet antal (begrænset antal rækker)