私はすべての "pid"(製品ID)cominationsを "wid"(単語ID)と選択して、最も多くの単語に一致する製品をグループ化するindx_0というテーブルを持っています。現在、実際の単語は「windex」という別のテーブルに格納されているため、テーブルindx_0にはその単語のIDと一致するプロダクトIDのみが含まれています。select query + join tables
ここに結果を得るために使用する現在のクエリがあります。
SELECT pid, count(*) WordMatchCount
FROM indx_0
WHERE wid in (294, 20591, 330)
group by pid
order by WordMatchCount desc
limit 1000
は、私は私はそれが完全一致を検索するので、他のキーワードよりも優先「DDR3」を含む結果を得ることはありません「DDRメモリカード」を検索言います。 "ddr3"と "phone"のどちらもddrと等しくないので、 "ddr memory card"と "phone memory card"は等しく扱われます。
"ddr3"や "ddr2"と "ddr3"または "ddr2"を非常によく一致させるために、joinやLIKE(あるいは他の好きな方法)を使用して、近くに一致しない他の結果よりも優先させたい。
CREATE TABLE IF NOT EXISTS `windex` (
`word` varchar(64) NOT NULL,
`wid` int(10) NOT NULL AUTO_INCREMENT
PRIMARY KEY (`wid`),
UNIQUE KEY `word` (`word`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=834922 ;
CREATE TABLE IF NOT EXISTS `indx_0` (
`wid` int(7) NOT NULL,
`pid` int(7) NOT NULL,
UNIQUE KEY `wid` (`wid`,`pid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
これが可能である:
はここで、テーブルの構造ですか?
ありがとうございました!
menthionテーブル構造を正しく指定してください – diEcho
テーブルの構造を追加しました – nick
'indx_o'にはプライマリキーがありません。どちらが親テーブルで、どのテーブルが子テーブルであるかを教えてください。 – diEcho