[英]Multiple term search query
我有一个搜寻器,可以扫描网页中的所有单词。 然后,它将每个单词及其所属的URL插入到mysql数据库中。然后,根据文档中找到的单词数量对搜索进行排名。 问题是...如何将多个术语查询添加到现有查询中。
它非常适合单项查询,但是我希望我的查询尝试在同一网页中一起查找单词,并且如果网页中都没有单词出现,则可以正常返回这些单词的结果。
我的查询如下:
$results = addslashes( $_POST['results'] );
" SELECT p.page_url AS url,
COUNT(*) AS occurrences
FROM page p, word w, occurrence o
WHERE p.page_id = o.page_id AND
w.word_id = o.word_id AND
w.word_word = \"$keyword\"
GROUP BY p.page_id
ORDER BY occurrences DESC
LIMIT $results"
使用COUNT(DISTINCT ...)
来计算在每个页面上找到的不同单词的数量,并使用IN
查找任何单词列表:
SELECT
p.page_url AS url,
COUNT(DISTINCT w.word_word) AS words_found
COUNT(*) AS occurrences
FROM page p
JOIN occurrence o ON p.page_id = o.page_id
JOIN word w ON w.word_id = o.word_id
WHERE w.word_word IN ('foo', 'bar')
GROUP BY p.page_id
ORDER BY occurrences DESC
如果要确保页面上至少有n个搜索字词,请添加HAVING子句:
GROUP BY p.page_id
HAVING COUNT(DISTINCT w.word_word) >= 2
ORDER BY occurrences DESC
如果数据库引擎支持,则可以进行子选择。 例:
SELECT
url,
(select count(*) from table where conditions1) as count1,
(select count(*) from table where conditions2) as count2
FROM table
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.