2017-12-04 11 views
0

をカウント:(共通タグによって関連商品や順序を探すには、私は同様の質問を通じて、検索が、解決策は、異なるテーブル構造と異なる状況のためだった

私が持つエントリによって命じ、同様のタグでdesign_idのリストを取得する必要があります最も一般的なタグは、最初の

テーブル構造を数える:

shop_tags (tag_id, tag_name) 
shop_tags_link (tag_id, design) 
shop_tshirts (design_id, article_id) 

のは、私が4つのデザイン

design_id 1 tags = red, blue 
design_id 2 tags = black, grey 
design_id 3 tags = yellow, green 
design_id 4 tags = white, red, black 
design_id 5 tags = red 
012を持っているとしましょう

入力は、デザインのIDの配列です:私は似たタグを使用してデザインを見つけて、共通タグによってそれらをソートする必要

$input = array("1", "2"); 

は(DESC)をカウントし、その入力がデザイン1および2であれば、私たちは」

design 4, design 5(当然、元の入力デザインを除く)

最後に、代わりの設計を返す:この順序で次の結果を与えるタグ「赤、青、黒、灰色」のデザインを探して再ID、私はテーブルから対応するarticle_idを見つける必要がありますhop_tshirtsと一致するデザイン。これを行う最善の方法は何ですか?別のクエリまたは別のINNER JOINを実行する必要がありますか?

答えて

1

ソリューションは、より明白であるように、私たちはと仕事をしなければならないものを修正再表示:

+-----------+ +-----------------+ +--------------+ 
| shop_tags | | shop_tags_links | | shop_tshirts | 
+-----------+ +-----------------+ +--------------+ 
| tag_id |----| tag_id   | /-| design_id | 
| tag_name | | design_id  |-/ | article_id | 
+-----------+ +-----------------+ +--------------+ 

design_id 1 tags = red, blue 
design_id 2 tags = black, grey 
design_id 3 tags = yellow, green 
design_id 4 tags = white, red, black 
design_id 5 tags = red 

+-----------+ +-----------------+ +--------------+ 
| shop_tags | | shop_tags_links | | shop_tshirts | 
+-----------+ +-----------------+ +--------------+ 
| 1 red  | | 1 1   | | 1 ?   | 
| 2 blue | | 2 1   | | 2 ?   | 
| 3 black | | 3 2   | | 3 ?   | 
| 4 grey | | 4 2   | | 4 ?   | 
| 5 yellow | | 5 3   | | 5 ?   | 
| 6 green | | 6 3   |  
| 7 white | | 7 4   | 
|   | | 1 4   | 
       | 3 4   | 
       | 1 5   | 

「似たタグを使用してデザインを見つけて、共通タグ・カウント(DESC)によってそれらを並べ替える」、 ので、入力がデザイン1と2の場合、次の結果をこの順序で与える「赤、青、黒、灰」というタグを持つデザインを探しています。

デザイン4、デザイン5もちろん) "

これはあなたが正しい方向に向くようにするはずです。これは私の頭の上から離れていて、テストされていないので、ちょっと微調整する必要があるかもしれませんが、主な概念をカバーする必要があります。

select count(b.tag_id) as mysort, b.design_id, c.article_id 
from shop_tags_links as a, shop_tags_links as b inner join shop_tshirts as c on b.design_id=c.design_id 
where 
    a.design_id IN (?,?) AND 
    a.tag_id=b.tag_id AND 
    b.design_id NOT IN(?,?) 
group by b.design_id 
order by mysort desc 
関連する問題