Table 1: Tracks
Table 2: Wordlist
Table 3: N:M Track has Words (trackwords)
Find all tracks which have all the words.
currently the query looks l
There's no point in left joins if you're only looking for tracks that have all the words. I'm assuming that (trackid
,wordid
) combination is unique in trackwords
.
SELECT t.id
FROM track as t, trackwords as tw, wordlist as wl
WHERE t.id=tw.trackid
AND wl.id=tw.wordid
AND wl.trackusecount>0 /* not sure what that is - you have it in your query */
AND wl.word in ('folsom','prison','blues')
GROUP by t.id
HAVING count(*) = 3
This query would benefit from indexes on wordlist(word), trackwords(trackid,wordid) and track(id).