これは、一致する順序ランクを製造するFIND_IN_SET
を利用して達成することができます。あなたの本当のフィルタname
に'input_name'
を置き換える、あなたの本当のテーブルの上に使用するためには
(select * from t1 where name = 'input_name')
union all
(select from t2.name, t2.tag1, t2.tag2, t2.tag3, t2.tag4, t2.tag5, t2.tag6, t2.tag7
(
select
*,
FIND_IN_SET(tag1, @tags) + FIND_IN_SET(tag2, @tags) + FIND_IN_SET(tag3, @tags) + FIND_IN_SET(tag4, @tags) +
FIND_IN_SET(tag5, @tags) + FIND_IN_SET(tag6, @tags) + FIND_IN_SET(tag7, @tags) AS cnt_tags
from t1 CROSS JOIN
(SELECT @tags := (select CONCAT_WS(',',tag1,tag2,tag3,tag4,tag5,tag6,tag7)
from t1 where name = 'input_name')) param
) t2
where name != 'input_name'
order by cnt_tags desc
limit 10)
:
はこれを試してみてください。
は、最初のレコードを選択する基準は何ですか?より良いサンプル入力出力。 – 1000111
特定の問題を抱えているコードを投稿してください。あなたの宿題はできません。 –