Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.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 MySQL,其中包含多个单词,并按重量排序_Php_Mysql_Sql Like - Fatal编程技术网

Php MySQL,其中包含多个单词,并按重量排序

Php MySQL,其中包含多个单词,并按重量排序,php,mysql,sql-like,Php,Mysql,Sql Like,让我们来看一个简单的InnoDB表questions,其中包含一列text,其中包含以下数据: What color does the sun have? What year it is? What year was Barack Obama born? Where in europe people speak french? When stackoverflow started? 现在,我想搜索本专栏: SELECT * FROM `questions` WHERE `text` LIKE

让我们来看一个简单的InnoDB表
questions
,其中包含一列
text
,其中包含以下数据:

What color does the sun have?
What year it is?
What year was Barack Obama born?
Where in europe people speak french?
When stackoverflow started?
现在,我想搜索本专栏:

SELECT *
FROM `questions`
WHERE `text` LIKE '%What%' OR `text` LIKE '%year%';
但是,这会产生输出:

What color does the sun have?
What year it is?
What year was Barack Obama born?
我希望输出按搜索词的出现顺序排列。换句话说,当问题同时包含“什么”和“年”时,它应该位于只包含“什么”的问题之前。因此,输出将如下所示:

What year it is?
What year was Barack Obama born?
What color does the sun have?

这只能用MySQL实现吗?如果没有,使用PHP是否有一种很好的方法?

最简单的方法是将以下
orderby
添加到查询中:

order by (`text` LIKE '%What%') + (`text` LIKE '%year%') desc

如果性能是一个问题,那么您应该研究MySQL全文函数。它们显著加快了许多全文搜索。

有多种方法可以实现这一点。但最大的问题将是性能。如果你的记录增加,这项技术将会非常缓慢。但如果只是几千张唱片,那也没关系。如果你想要最简单的方法,我会说使用mysql的全文搜索,大约会有10000条记录,不会太大。InnoDB中是否有全文选项?我不知道为什么,但我认为没有。Thx,关于全文,我必须使用MyISAM表,对吗?我建议您在列上建立索引。然后您可以使用MyISAM或InnoDB。我在列上有一个索引。然而,从MySQL手册中可以看出:“全文索引只能用于MyISAM表,并且只能为CHAR、VARCHAR或text列创建。”。对MySQL最新版本的限制已经解除。