gpt4 book ai didi

php - Mysql 从 2 个表中的 2 列进行全搜索

转载 作者:行者123 更新时间:2023-11-29 17:26:24 25 4
gpt4 key购买 nike

我有两张 table 。一个是问题,另一个是答案,格式如下。

question(id,text,user)

answer(id,text,question_id,user)

两个表显然具有相同的行数。

当用户搜索短语或单词时,我希望它在问题文本和答案文本中搜索该单词,并返回最常见的匹配项。

我尝试使用 mySQL 的完整搜索,但无法使其在 2 个不同的表和 2 列上运行。

如果可能的话,我也不想将问题和答案合并到另一个表中。

问题表:

CREATE TABLE `questions` (
`id` int(11) NOT NULL,
`message_id` int(11) DEFAULT NULL,
`text` text NOT NULL,
`answer` int(11) DEFAULT NULL,
`status` varchar(255) NOT NULL,
`user` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;


ALTER TABLE `questions`
ADD PRIMARY KEY (`id`);
ALTER TABLE `questions` ADD FULLTEXT KEY `text` (`text`);



ALTER TABLE `questions`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

答案表:

 CREATE TABLE `answers` (
`id` int(11) NOT NULL,
`message_id` int(11) DEFAULT NULL,
`text` text NOT NULL,
`question` int(11) NOT NULL,
`status` varchar(255) NOT NULL,
`user` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;


ALTER TABLE `answers`
ADD PRIMARY KEY (`id`);
ALTER TABLE `answers` ADD FULLTEXT KEY `text` (`text`);


ALTER TABLE `answers`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

最佳答案

如果您想查询多个关键字,建议将其存储在应用程序代码中的某个位置(即使用爆炸函数来分隔每个关键字)。

此外,在应用代码中,尝试动态生成 W​​HERE 语句(因为您无法提前知道要使用的关键字数量):

String sql_where = " ";
for(int i = 0, i<search.length, i++){
if (i=0)
sql_where += "WHERE TEXT LIKE '%"+search[i]+"%';
else
sql_where += "\n OR TEXT LIKE '%"+search[i]+"%';
}

然后,您需要使用以下方法查询两个表:

query = "SELECT ID,TEXT,'QUE' AS TYPE FROM QUESTION "+sql_where+" UNION SELECT ID,TEXT,'ANS' AS TYPE FROM ANSWER "+sql_where+";";

请注意,为每个结果行添加了类型以分隔结果行的来源。如果您需要显示提取结果的位置,这将为您提供帮助。

对于其余部分,我将只解释总体思路。您将需要使用之前构建的搜索数组来与结果集进行比较。对于每个单词,尝试在每个返回的行中查找它。另一方面,您将创建一个数组来存储常见命中和数组索引(稍后将使用)。当您在一行中找到一个单词时,其在计数数组中的相应条目将增加 1。

完成后,您所要做的就是根据点击次数的降序对计数数组重新排序。您会注意到之前创建的索引 ID 将发生变化,这将允许您在下一阶段使用它。

为了加载,您将循环计数数组,并使用计数数组中创建的索引列从结果集中加载结果条目。

假设上面的代码是一个总体思路,因为我不知道您正在使用哪种语言

关于php - Mysql 从 2 个表中的 2 列进行全搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50941005/

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