Mak*_*a95 6 php mysql database web
我做两个名为文本字段搜索Subject和Text特定关键字.为此,我使用该LIKE语句.尝试按出现次数对结果进行排序时遇到问题.
我的搜索查询如下所示:
SELECT * FROM Table WHERE (Text LIKE '%Keyword%' OR Subject LIKE '%Keyword%')
Run Code Online (Sandbox Code Playgroud)
我尝试添加一个count()语句并按出现次数对其进行排序,但count()语句只是继续返回表中的行数.
这是带有count语句的查询:
SELECT *, COUNT(Text LIKE '%Keyword%') AS cnt FROM News WHERE (Text LIKE '%Keyword%' OR Subject LIKE '%Keyword%') ORDER BY cnt
Run Code Online (Sandbox Code Playgroud)
我正在寻找的东西是返回每行的主题和文本列上的匹配数,然后在每行上出现最多关键字后排序结果.
下面的查询可以为您提供字符串在两列(即文本和主题)中出现的次数,并将按条件对结果进行排序,但这不是一个好的解决方案,性能方面最好在应用程序代码级别对结果进行排序
SELECT *,
(LENGTH(`Text`) - LENGTH(REPLACE(`Text`, 'Keyword', ''))) / LENGTH('Keyword')
+
(LENGTH(`Subject`) - LENGTH(REPLACE(`Subject`, 'Keyword', ''))) / LENGTH('Keyword') `occurences`
FROM
`Table`
WHERE (Text LIKE '%Keyword%' OR Subject LIKE '%Keyword%')
ORDER BY `occurences` DESC
Run Code Online (Sandbox Code Playgroud)
@lserni建议一种更简洁的计算出现次数的方法
SELECT *,
(LENGTH(`Text`) - LENGTH(REPLACE(`Text`, 'test', ''))) / LENGTH('test') `appears_in_text`,
(LENGTH(`Subject`) - LENGTH(REPLACE(`Subject`, 'test', ''))) / LENGTH('test') `appears_in_subject`,
(LENGTH(CONCAT(`Text`,' ',`Subject`)) - LENGTH(REPLACE(CONCAT(`Text`,' ',`Subject`), 'test', ''))) / LENGTH('test') `occurences`
FROM
`Table1`
WHERE (TEXT LIKE '%test%' OR SUBJECT LIKE '%test%')
ORDER BY `occurences` DESC
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1573 次 |
| 最近记录: |