Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 选择查询+联接表_Php_Mysql - Fatal编程技术网

Php 选择查询+联接表

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

我有一个名为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 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