0

linkssubmissions、 、の 4 つのテーブルがlinks_keywordsありsubmissions_keywordsます。

それらは次のように構成されています。

リンク:
link_id link_url

提出物:
submit_id submit_url submit_last_used

リンク_キーワード:
id link_id キーワード

提出_キーワード:
id submit_id キーワード

私がやりたいのは、リンクのキーワードが送信のキーワードと最もよく一致する送信から結果を取得し、複数の結果がある場合は、最後に使用された結果でフィルター処理することです。このクエリを構成する方法がわかりません。また、1 つのキーワードに一致させるのではなく、一致するキーワードの数を確認し、そこから最適な結果を判断できるようにしたいと考えています。

4

1 に答える 1

0

私はちょうどOracleで同様のクエリに取り組みました。Oracle には LIMIT 句がないため、MySQL では 100% 簡単です。これは最も効率的ではないかもしれませんが、必要な答えが得られます。リンク値を取得するには、別の結合を追加するだけです。キーワード句の 1 つを削除することにより、単一の用語を検索できます。

select  
    t1.submission_id, t1.submission_url, t1.submission_last_used , t3.keyword
from 
    submissions t1
join submission_keywords t2 on 
    t2.submission_id = t1.submission_id
join link_keywords t3 on 
    t3.keyword = t2.keyword 
where 
    (t3.keyword = 'search' OR
    t3.keyword = 'email')
    AND t1.submission_id = (
        SELECT submission_id from submissions where submission_id IN (
            SELECT submission_id from submission_keywords WHERE keyword = t2.keyword) 
        order by submission_last_used DESC LIMIT 1);
于 2012-05-17T14:30:07.197 に答える