Php 选择查询+联接表
我有一个名为indx_0的表,在该表中,我选择了所有pid产品id组合,其中wid word id根据匹配最多单词的产品对它们进行分组。现在,由于实际单词存储在另一个名为windex的表中,表indx_0只包含与单词ID匹配的产品ID 下面是我用来获取结果的当前查询Php 选择查询+联接表,php,mysql,Php,Mysql,我有一个名为indx_0的表,在该表中,我选择了所有pid产品id组合,其中wid word id根据匹配最多单词的产品对它们进行分组。现在,由于实际单词存储在另一个名为windex的表中,表indx_0只包含与单词ID匹配的产品ID 下面是我用来获取结果的当前查询 SELECT pid, count(*) WordMatchCount FROM indx_0 WHERE wid in ( 294, 20591, 330 ) group by pid order by
SELECT pid, count(*) WordMatchCount
FROM indx_0
WHERE wid in ( 294, 20591, 330 )
group by pid
order by WordMatchCount desc
limit 1000
假设我搜索ddr存储卡,我不会得到包含优先于任何其他关键字的ddr3的结果,因为它搜索的是精确匹配。所以,ddr存储卡和手机存储卡将被视为平等的,因为ddr3和手机都不等于ddr
我想使用join和LIKE或任何其他更可取的方式来允许ddr与ddr3或ddr2非常接近地匹配,从而将其优先于没有接近匹配的其他结果
以下是表格结构:
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;
这可能吗
谢谢大家! 如果您是按单词id进行筛选,那么显然您没有找到匹配项。每个ID都有一个特定的单词。您需要的是直接从windex查询ID,并在indx_0中查找匹配项
我会确保运行EXPLAIN并为适当的列编制索引,尽管如此。请注意表结构是否正确。indx_o中没有主键。请告诉我哪个是父表,哪个是子表。。表示外键。您的查询不包括Windex中的任何内容Windex是父表,indx_0是子表,或者我认为应该是这样。我还没有分配外键,但我得处理一下。我意识到这个查询没有包含来自windex的任何内容,但我想创建一个这样的查询。谢谢你的回复。
SELECT i0.pid, count(*) WordMatchCount
FROM indx_0 AS i0
LEFT JOIN windex AS wi ON (wi.wid = i0.wid)
WHERE wi.word REGEXP '(.*)ddr(.*)|(.*)memory(.*)|(.*)card(.*)'
group by i0.pid
order by WordMatchCount desc