gpt4 book ai didi

mysql - 从表 MYSQL 获取最相关数据的最佳方法

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

我有一个 entry 表,其中的列如下所示:

id | ans_1 | ans_2 | ans_3   | ans_4    | ans_5   | date

表格中的一些示例数据如下所示:

1  | foo   | bar   | foobar  | bar foo  | foofoo  | 2011/9/15**
2 | foo2 | bar2 | foobar2 | bar2 foo | foofoo2 | 2011/9/17**
3 | foo3 | bar3 | foobar3 | bar foo3 | foo3foo | 2011/9/20**

我想从上面由 5 个答案集提供的 entry 表中搜索最相关的数据。

我的解决方案 #1:

SELECT * FROM entry 
WHERE ans_1 LIKE '%$answer_set_1_en%'
AND ans_2 LIKE '%answer_set_2_en%'
AND ans_3 LIKE'%answer_set_3_en%'
AND ans_4 LIKE '%answer_set_4_en%'
AND ans_5 LIKE '%answer_set_5_en%';

但是,我现在有 2 组答案(不同的语言集)要比较,这是我针对 #2 的解决方案:

SELECT * FROM entry 
WHERE (ans_1 LIKE '%$answer_set_1_en%'
AND ans_2 LIKE '%answer_set_2_en%'
AND ans_3 LIKE '%answer_set_3_en%'
AND ans_4 LIKE '%answer_set_4_en%'
AND ans_5 LIKE '%answer_set_5_en%')
OR
(ans_1 LIKE '%$answer_set_1_jp%'
AND ans_2 LIKE '%answer_set_2_jp%'
AND ans_3 LIKE '%answer_set_3_jp%'
AND ans_4 LIKE '%answer_set_4_jp%'
AND ans_5 LIKE '%answer_set_5_jp%');

但是,输入可能会混合两种语言,所以我的第三次尝试:

SELECT * FROM entry 
WHERE (
(ans_1 LIKE '%$answer_set_1_en%' OR ans_1 LIKE '%$answer_set_1_jp%')
AND (ans_2 LIKE '%answer_set_2_en%' OR ans_2 LIKE '%$answer_set_2_jp%')
AND (ans_3 LIKE '%answer_set_3_en%' OR ans_3 LIKE '%$answer_set_3_jp%')
AND (ans_4 LIKE '%answer_set_4_en%' OR ans_4 LIKE '%$answer_set_4_jp%')
AND (ans_5 LIKE '%answer_set_5_en%' OR ans_5 LIKE '%$answer_set_5_jp%'));

第三个查询是否已经足够优化/高效?我可以知道查询最相关列的任何其他替代方法吗?

最佳答案

如果您想混合使用英语和日语答案,那么这看起来是可行的方法。请注意,如果您获得大量条目,这种方法会杀死您,进行那么多 LIKE 比较会非常慢。

你能给出一个有效的 answer_set 的例子吗?

另一种方法是在保存条目(应用程序端或使用触发器)时进行相同的比较,除了存储实际答案外,还存储其中有多少是正确的。然后一个简单的

select * from entry where correct_answers = 5

会非常快速地为您提供所需的行。

关于mysql - 从表 MYSQL 获取最相关数据的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7426456/

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