Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >跨多个相关表的相关性搜索

跨多个相关表的相关性搜索
EN

Stack Overflow用户
提问于 2012-03-31 07:23:04
回答 2查看 593关注 0票数 0

我有一个名为cards的表,它有相关的表brigadesidentifiers。一张卡可以有多个大队和标识符。我想进行一个单独的搜索,比如'purple king',其中‘紫色’是一个旅,‘国王’是一个标识符,并找到具有这些旅和标识符的牌。对一个类似问题的回答,https://stackoverflow.com/a/9951200/633513,展示了如何跨多个表进行全文搜索。我也想做同样的事情,除了我只想要相关的匹配。这个是可能的吗?

表结构:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Cards: id as INT, title as VARCHAR(50)
Brigades: id as INT, brigade as VARCHAR(50)
Identifier: id as INT, identifier as VARCHAR(50)

连接表:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CardBrigades: id as INT, card_id as INT, brigade_id as INT
CardIdentifiers: id as INT, card_id as INT, identifier_id as INT

示例标识符:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Angel
Animal
Archer
Army
Assyrian
Babylonian
Based on Prophecy
Beast
Bows, Arrows, Spears, Javelins and Darts
Canaanite
'Capture' in Special Ability
'Censer' in Title
Chief Priest
Child of Leah
Commander
Connected to David
Connected to Demons
'Covenant' in Title
'David' in Title
'David' in Verse
Deacon
Prince

示例旅:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
None
Black
Brown
Crimson
Gold (Evil)
Gray
Orange
Pale Green
Multi (Evil)
Blue
Gold (Good)
Green
Purple
Red
Silver
Teal
White
Multi (Good)
Multi
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-31 08:46:01

根据你发布的链接中的答案,你可以这样做

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT id,SUM(relevance) as total_relevance FROM (
SELECT 
    id, 
    (MATCH(title) AGAINST ('search string')) AS relevance
    FROM Cards
UNION
SELECT 
    Cards.id,
    (MATCH(brigade) AGAINST ('search string')) AS relevance
    FROM Brigades 
    INNER JOIN CardBrigades ON Brigades.id=brigade_id
    INNER JOIN Cards ON card_id=Cards.id 
UNION
SELECT 
    Cards.id,
    (MATCH(identifier) AGAINST ('search string')) AS relevance
    FROM Identifier 
    INNER JOIN CardIdentifier ON Identifier.id=identifier_id
    INNER JOIN Cards on card_id=Cards.id 
) AS combined_search 
GROUP BY id
HAVING total_relevance > 0

我不确定这会有多好。你最好看看其他的解决方案,比如Solr,Lucene,甚至NoSQL存储引擎。

票数 1
EN

Stack Overflow用户

发布于 2013-10-12 07:53:19

如果你只想要相关的(相关的?)结果您可以在布尔模式下使用全文搜索,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select 
    identifier, brigade, P.id as identifier_id, B.id as brigade_id, 
    match(identifier)  against ('purple prince') +
    match(brigade)     against ('purple prince')   as score
from Identifier P, Brigade B
where 
    match(identifier)  against ('purple prince' IN BOOLEAN MODE) and 
    match(brigade)     against ('purple prince' IN BOOLEAN MODE)
order by -score
;

(为了简单起见,我只显示了查询的全文搜索部分,并省略了与Card*表的连接)

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

https://stackoverflow.com/questions/9953922

复制
相关文章
记一次Navicat for MySQL 10060错误的解决过程
最近加班挺多,所以也好久没远程访问自己云服务器上的MySQL数据库了。今天本地启动Node服务时连不上MySQL,照常用Navicat For MySQL连接远程数据库进行检查,结果发现突然报错了。
程序员白彬
2020/07/10
9.4K1
记一次Navicat for MySQL 10060错误的解决过程
MySQL:binlog复制过程中的错误跳过机制及其应用
MySQL是一种广泛使用的关系数据库管理系统,提供了强大的数据复制功能,以确保数据的可靠性和一致性。然而,在复制过程中可能会遇到某些错误,这些错误可能会中断复制进程,影响到系统的正常运行。为了应对这种情况,MySQL提供了一种机制,允许我们在从服务器上跳过特定的错误,从而保持复制的连续性。在本文中,我们将探讨这种机制,以及如何在实践中应用它。
运维开发王义杰
2023/10/23
6040
MySQL:binlog复制过程中的错误跳过机制及其应用
MySQL的存储过程_MySQL创建存储过程
在项目开发中,经常会遇到这样一种场景,当修改A表的一条数据时,需要关联修改B表、C表甚至其他更多表的数据,为什么会这样呢?
全栈程序员站长
2022/11/08
22.3K0
MySQL的存储过程_MySQL创建存储过程
MySQL:MySQL 存储过程
  <1>存储过程一旦调试完成后,就可以稳定运行,(前提是,业务需求要相对稳定,没有变化)
全栈程序员站长
2022/09/06
16.1K0
MySQL:MySQL 存储过程
实现MySQL高可用之MHA过程错误记录集
MHA 集群是一套优秀的作为 MySQL 高可用性环境下故障切换和主从提升的高可用软件。目前在 MySQL 高可用方面是一个相对成熟的解决方案 ,在 MySQL 故障切换过程中,MHA 能做到在 0~30 秒之内自动完成数据库的故障切换操作并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用。
肓己
2021/08/12
1.2K0
MySQL1054错误_mysql错误代码1064
Duplicate entry ‘…’ for key ‘PRIMARY,即插入数据时,要插入数据的主键数据(…)已经存在,不能再重复添加了。例:Duplicate entry ‘0’ for key ‘PRIMARY是指主键为0的数据已经存在,不能再插入主键值为0的数据了。
全栈程序员站长
2022/08/02
1.7K0
mysql存储过程执行_mysql存储过程不执行
查看event是否开启: show variables like ‘%sche%’;
全栈程序员站长
2022/10/02
16.7K0
mysql配置1045错误_MySql 1045错误「建议收藏」
配置时以管理员身份运行MySQL Instance Configuration Wizard
全栈程序员站长
2022/08/13
2.3K0
MySQL 存储过程
  MySQL 5.0 版本开始支持存储过程。存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。存储过程是为了完成特定功能的 SQL 语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。
Demo_Null
2020/09/28
13.4K0
MySQL 存储过程
mysql 配置错误
mysql配置的时候报APPCRASH错误,错误模块是ntdll.dll。没有启动项,按文档教程一模一样配置了IIS,装了PHP最新版7.4.4 win32。可以运行。想装个MySQL玩玩,装不了,这是什么回事,期待有人解答一下。对这方面不是很懂,哈哈哈,就是模仿人家的教程安装的。
用户7140869
2020/04/03
3K0
MySQL连接错误
ERROR 1045 (28000): Access denied for user’root’@’localhost’(using password:YES)
一点儿也不潇洒
2018/08/07
3.6K0
MySQL连接错误
MySQL存储过程
存储过程体包含了在过程调用时必须执行的语句,例如:dml、ddl语句,if-then-else和while-do语句、声明变量的declare语句等。
看、未来
2021/12/05
10.1K0
MySQL存储过程
SQL语句需要先编译然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。
流柯
2018/08/30
13.7K0
MySQL存储过程
【MySQL】存储过程
1、解耦合。数据库部分可交由专门的数据库管理人员去做,像前后端联合协作那样提供接口供后端调度。(这两天对后端开发又有了新的理解:作为前端和数据库之间数据转接的中间人。不论是哪种业务,后端架构如何发展,不都是为了数据走的更顺畅点吗?)作为后端开发人员,SQL是必备语言,但是如果条件允许,专业的事情交给专业的人来做。
看、未来
2021/12/20
7.9K0
mysql存储过程
CONCAT(person_no,"号犯人住", i , "号床位"); ---字符串拼接
用户5927264
2019/07/31
8.3K0
MySQL 存储过程
存储过程(Stored Procedure)是一种存储在数据库中的程序,可供外部程序调用的一种数据库对象。
恋喵大鲤鱼
2023/10/12
3820
MySQL 存储过程
mysql存储过程
1)“存储过程和函数”:类似于java中的方法,python中的函数。 2)“使用存储过程的好处”:   ① 提高代码的重用性;   ② 简化操作;   ③ 减少了编译次数,并且减少了和数据库服务器的连接次数,提高了效率。    注意:每执行一句sql语句,就会连接mysql服务器一次。 3)“存储过程的含义”:一组预先编译好的sQL语句的集合。
数据分析与统计学之美
2022/05/09
11.7K0
mysql存储过程
MySQL(存储过程)
存储过程是一组已经预先编译好的SQL语句的集合,可以理解为批处理语句(增加流程控制语句),一般在复杂的业务逻辑中才会使用存储过程。
全栈开发日记
2022/05/12
11.8K0
MySQL(存储过程)
MySQL存储过程
可惜啊!MySQL目前并不支持在SQL语句中存在流控制语句,例如上面的IF NOT EXISTS THEN END IF;让人痛心疾首。但是我们可以使用存储过程完成上面要求的功能。
恋喵大鲤鱼
2018/08/03
11.3K0
MySQL存储过程
Mysql存储过程
存储过程就是一条或者多条SQL语句的集合,可以视为批文件。它可以定义批量插入的语句,也可以定义一个接收不同条件的SQL。
用户3467126
2019/08/29
6.7K0

相似问题

如何修复antd select中的单个选择

22

无法修复Antd模式高度

196

如何修复未正确放置的antd弹出箭头?

113

在React中不支持Antd源映射

847

需要修复在antd树组件中开始执行的问题。

28
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文