最好的方式来获得表MYSQL最相关的数据
问题描述:
我有一个entry
表列如下图所示:如下图所示最好的方式来获得表MYSQL最相关的数据
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**
我希望从上述entry
表中搜索最相关的数据,由5个答案集提供。
我的解决方案#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套答案(DIFF语言集)现在来比较,这才是我的解决方案#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%'));
是第三查询优化/效率已经足够?我是否可以知道查询最相关列的其他方法吗?
答
如果你想允许英语和JAPANES answeres的混合,然后这看起来像的路要走。请注意,如果你得到很多条目,这个问题会杀了你,做很多LIKE比较会很慢。
你能给出一个有效的answer_set的例子吗?
另一种方法是做同样的事,在比较节省的条目的时间(申请方或与触发器),除了存储实际的答案还存储有多少人是正确的。然后,一个简单的
select * from entry where correct_answers = 5
是想给你想要的行非常快。
感谢安德烈亚斯的快速反应,但我认为这是我能得到的最好的。 – alenn