SQL 对表中的值进行计数,并且仅返回最高的 5 个


SQL count values in table and only return 5 highest

所以,我正在我的网站上处理一个简单的搜索页面,我试图只选择最相关的信息。

为此,我想从 2 个不同的表中选择数据。但我只想选择与搜索查询匹配的数据。

现在,这是有趣的部分。我只想选择$variable出现次数最多的数据,然后将该数据从高到低排序,然后将结果数量限制为1,000或2,000)

用更少的单词/代码形式问它。我想在SQL(由PHP运行)中做这样的事情

$query = ["search","me","please"];
$maxData = 1500;
foreach($query as $value){
   //SQL start(Part I need help on)
   $res1 = SELECT * from table1 WHERE column LIKE %$value% AND return columns with highest times $value appears LIMIT $maxData
   $res2 = SELECT * from table2 WHERE column1,column2,column3 LIKE %$value% AND return columns with highest times $value appears LIMIT $maxData
}

我希望它计算搜索的变量在列中出现的次数,并按从最高计数到最低计数的顺序返回时间

所有这些仅在SQL中都有可能吗?

另外,如果我的问题不清楚或难以理解,请说出来。

您可以使用MySQL fulltext搜索。 在这种情况下,您将获得每个结果的分数。

在此处查看更多详细信息

可以通过使用

group by 语句和使用帮助程序表来使用 sql 来完成。

创建表tbl_search,其中一列search_term为 varchar。

每次执行查询时,此表将被截断并重新填充搜索词。

Select * from
(Select search_term, count(*) as hits 
from table1 , tbl_search 
where table1.column like '%' + tbl_search.search_term +'%'
Group by tbl_search.search_term) as z1
Order by hits

索引 tbl_search.search_term 以帮助查询性能。