gpt4 book ai didi

mysql - SQL 查询根据最大共同结果对结果进行排序

转载 作者:行者123 更新时间:2023-11-29 22:56:06 24 4
gpt4 key购买 nike

我在进行 SQL 查询时遇到问题。我正在制作一个小型搜索引擎,其中单词到页面的映射或索引是这样保存的。抱歉,我无法在这里发布图像,所以我尝试像这样编写输出。

+---------+---------+-----------+--------+

| word_id | page_id | frequency | degree |

+---------+---------+-----------+--------+

| 2331 | 29 | 2 | 1 |

| 2332 | 29 | 7 | 1 |

| 2333 | 29 | 4 | 1 |

| 2334 | 29 | 1 | 1 |

| 2335 | 29 | 1 | 1 |

| 2336 | 29 | 1 | 1 |

| 2337 | 29 | 2 | 1 |

| 2338 | 29 | 7 | 1 |

| 2343 | 29 | 1 | 3 |

| 2344 | 29 | 1 | 3 |

......
......
...... and so on.

Word_id 指向其他表中存在的单词,page_id 指向其他表中存在的 URL。

现在假设我想搜索“Rapid 3D Prototyping Services”。我通过查询带来了与各个单词对应的结果的并集 ->

select * from words_detail where word_id=2353 or word_id=2364 or word_id=2709 or word_id=2710;

在上面的查询中,word_ids 对应于搜索查询中的 4 个单词,结果如下。

与各个单词相对应的 page_id 的并集...

mysql>

select * from words_detail where word_id=2353 or word_id=2364 or word_id=2709 or word_id=2710;


+---------+---------+-----------+--------+

| word_id | page_id | frequency | degree |

+---------+---------+-----------+--------+

| 2353 | 29 | 2 | 4 |

| 2353 | 33 | 2 | 2 |

| 2353 | 36 | 5 | 9 |

| 2353 | 40 | 1 | 4 |

| 2353 | 41 | 1 | 9 |

| 2353 | 45 | 4 | 9 |

| 2353 | 47 | 2 | 9 |

| 2353 | 49 | 4 | 9 |

| 2353 | 52 | 1 | 4 |

| 2353 | 53 | 1 | 9 |

| 2353 | 66 | 2 | 9 |

| 2364 | 29 | 1 | 4 |

| 2364 | 34 | 1 | 4 |

| 2364 | 36 | 9 | 2 |

| 2709 | 36 | 1 | 9 |

| 2710 | 36 | 1 | 9 |

+---------+---------+-----------+--------+

16 rows in set (0.00 sec)

但我希望结果按照最大匹配排序。较早的结果应该是所有 4 个单词都匹配的情况,下一个结果应该是 3 个单词匹配的情况,依此类推。换句话说,前面的结果应该具有 4 个 word_ids 共有的 page_id,接下来的结果应该是 3 个 word_ids 共有的 page_id,依此类推。

我检查了here但这在我的情况下不起作用,因为在我的情况下,OR 条件在一行中不匹配。

如何设计这样的查询?

最佳答案

使用您的 page_id 出现次数作为匹配计数,然后按其排序。

select * from words_detail A
inner join
(SELECT PAGE_ID
, COUNT(PAGE_ID) matchCount
from words_detail
where word_id=2353 or word_id=2364 or word_id=2709 or word_id=2710
group by PAGE_ID) B
on A.PAGE_ID=B.PAGE_ID
where word_id=2353 or word_id=2364 or word_id=2709 or word_id=2710
order by matchCount desc

关于mysql - SQL 查询根据最大共同结果对结果进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28712526/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com