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

Mysql mange til mange forhold forespørgsel. Hvordan får man alle tags af filtrerede indlæg?

Nå, det er det bedste, jeg kan komme i tanke om klokken 04:30:

SELECT distinct tag_id FROM
    (SELECT pt1.post_id FROM pt1
    INNER JOIN tags t1 ON (pt1.tag_id = t1.id)
    WHERE t1.id IN (1, 2)
    GROUP BY pt1.post_id
    HAVING COUNT(DISTINCT t1.id) = 2) MatchingPosts
INNER JOIN pt2 ON (MatchingPosts.post_id = pt2.post_id)
WHERE (pt2.tag_id NOT IN (1, 2))

(1, 2) er de tags, du leder efter, og antallet af tags skal selvfølgelig svare til antallet af tags, du bruger til at filtrere.

Her er et eksempel (Bemærk, at jeg har ændret dataene lidt)



  1. Online migrering fra MySQL 5.6 Non-GTID til MySQL 5.7 med GTID

  2. Swift httppost-data indsættes ikke i MySQL-databasen

  3. Sådan bruges indekser til en forespørgsel, der filtrerer MELLEM to kolonner

  4. Parsing af MySQL til JavaScript-arrays gennem PHP og jQuery