0

リンク、キーワード、keywords_links の 3 つのテーブルがあります。リンクには複数のキーワードを含めることができ、複数のリンクに同じキーワードを含めることができます。とkeywords_linksを結合するために使用されます。次のクエリを実行すると、複数のキーワードが一致するため、同じリンクの複数の行が返されます。一意の行を返すようにこのクエリを変更するにはどうすればよいですか?linkskeywords

SELECT links . * 
FROM  `links` 
INNER JOIN keywords_links ON keywords_links.link_id = id
INNER JOIN keywords ON keywords.id = keywords_links.keyword_id
WHERE keywords.keyword
IN (
'php', 'sql', 'html', 'css'
)
4

1 に答える 1

1

DISTINCT最も簡単な方法は、 の後に a を置くことSELECTです:

SELECT DISTINCT links.*
...
...

しかし、おそらくより効率的な解決策は、すべての列を区別する必要がないようにクエリを書き直すことです。

SELECT a.*
FROM links a
INNER JOIN
(
    SELECT a.link_id
    FROM keywords_links a
    INNER JOIN keywords b ON
        a.keyword_id = b.id AND
        b.keyword IN ('php', 'sql', 'html', 'css')
    GROUP BY a.link_id
) b ON a.id = b.link_id
于 2012-07-12T01:32:10.413 に答える