2 つのテーブルの JOIN を実行するときに、2 つの特定の「タグ」と同じ「hashid」を持つリンクを mysql で見つけるのに問題があります。
テーブルが次のようになっているとします。
リンク
md5 url title numberofsaves
-----------------------------------------
a0a0 google.com foo 200
b1b1 yahoo.com yahoo 100
タグ
md5 tag
---------------
a0a0 awesome
a0a0 useful
a0a0 cool
b1b1 useful
b1b1 boring
'useful' と 'awesome' の両方のタグを持つ行を返したい
1 つのタグでリンクを検索するための現在の (作業/高速) クエリ:
SELECT links.title, links.numsaves FROM links LEFT JOIN tags ON links.md5=tags.md5 WHERE tags.tag = 'useful' ORDER BY links.numberofsaves DESC LIMIT 20
記事を読んだ後、私は以下を使用しようとしました:
SELECT links.title, links.numsaves FROM links LEFT JOIN tags ON links.md5=tags.md5 GROUP BY tags.md5 HAVING SUM(tags.tag='useful') AND SUM(tags.tag='awesome') ORDER BY links.numberofsaves DESC LIMIT 20
これは機能しますが、信じられないほど遅いため、使用できません。
誰でも解決策を知っていますか?