首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用like操作符和

使用like操作符和
EN

Stack Overflow用户
提问于 2022-05-20 17:04:38
回答 1查看 22关注 0票数 0

引言

我有一个项目,我们帮助IT社区组织更好的IT会议(就像meetup.com,但只针对IT社区),称为https://codotto.com/

我们正在开发一个新的特性,在这里我们希望显示某些标签的使用数量。该算法应该像Stackoverflow的算法一样工作。您可以编写javascript,并得到一个具有与查询匹配的标记的列表,这些标记按最常用的查询排序。

我目前正在使用Laravel,但是我将发布原始查询,这样mysql向导可以更容易地帮助我解决问题:)

问题

我有以下表格

标签表

代码语言:javascript
复制
id  name
1   javascript
2   javascript-tools
3   javascript-security

group_has_tags表

代码语言:javascript
复制
group_id  tag_id
1         2
2         2
2         3

我们已经使用了两次javascript-tools标记,javascript-security使用了一次,而javascript则完全没有使用。

现在,如果用户搜索javascript,他应该获得第一个javascript (因为它是一个直接匹配的),然后是按其使用情况排序的其余标记。

在Laravel中,这是我拥有的代码(简化的ofc)

代码语言:javascript
复制
$tags = Tag::withCount('groups')
  ->orderBy('groups_count', 'DESC')
  ->where('name', 'LIKE', 'javascript%')
  ->get(2);

问题是,由于我只返回2结果,结果中没有包含javascript,即使是用户真正写的结果

对于mysql魔术师,下面是原始查询

代码语言:javascript
复制
select
  `tags`.*,
  (
    select
      count(*)
    from
      `meetups`
        inner join `meetup_has_tags` on `meetups`.`id` = `meetup_has_tags`.`meetup_id`
    where
        `tags`.`id` = `meetup_has_tags`.`tag_id`
  ) as `meetups_count`
from
  `tags`
where
    `title` LIKE 'javascript%'
order by
  `meetups_count` desc
limit
  2 offset 0

问题

这里的主要目标是将最相关的结果返回给用户。他写道,javascriptjavascript首先出现,其次是“相关”结果。我发现的方法是根据使用标记的次数进行排序。

有什么解决方案可以让我“请先获取与此查询匹配的结果,然后返回最相关的结果”吗?

所谓“最相关”的结果,我只是指“用户正在寻找什么”。如果他写了"javascript“,它应该返回"javascript”和"javascript-tools“(因为"javascript-tools”被使用了两次,但用户实际上是在搜索"javascript")。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-20 18:34:25

以下是您的查询:

代码语言:javascript
复制
SELECT * FROM
(SELECT tags.*,COALESCE((SELECT COUNT(*) FROM group_has_tags WHERE tag_id = tags.id),0) AS usage
FROM tags
WHERE title LIKE 'javascript%') AS tmp
ORDER BY tmp.name = 'javascript' DESC,usage DESC

对于每个匹配的标记,您将得到使用它的次数。然后,首先根据标签是否与用户输入的内容匹配进行排序,然后根据用法进行排序。当然,您必须将这个查询参数化,但我希望您能够理解。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72322482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档