我有一个MySQL表,记录每个访问者的搜索词。有时它只是一个单词,有时它是多个单词。在我的后端,我想列出搜索次数最多的单词desc limit x
。
当然,我可以用PHP来做,但我想知道它是否也可以用MySQL。
search_string
--------------
Hotel in Berlin
Paris
New York
Grand Hotel Principe
Royal Myconian Resort Thalasso Spa
Spa Resort
我知道像纽约这样的城市可以分为纽约和约克,但忽略了这一点。
感谢您的帮助!
答案 0 :(得分:3)
可以在单个查询中执行此操作,但您必须假设最大字数。
select word, count(*) as cnt
from (select substring_index(substring_index(search_string, ' ', n.n), ' ', -1) as word
from searches s cross join
(select 1 as n union all select 2 union all select 3 union all select 4 union all select 5
) n
where length(replace(search_string, ' ', ' x')) - length(search_string) <= n
) w
group by word
order by cnt desc;
对substring_index()
的嵌套调用会返回列表中的“第n个”字词。 where
子句验证在列表中有多少单词。