考虑序列的mysql查询

时间:2011-02-10 04:10:41

标签: mysql

  • 搜索词a:黑色小石头
  • 搜索字词b:black rock small
  • 搜索词c:小黑岩

我想设计一个查询,该查询将采用编写术语的顺序。现在,我希望上述三个术语产生相同的结果,但我希望结果的顺序能够反映术语的顺序。

我只希望这是有道理的;如果没有,请告诉我。

1 个答案:

答案 0 :(得分:1)

我能看到这个工作的唯一方法是,如果您将搜索项作为属性,在数据库表中按特定顺序分开。

  • 属性1:黑色
  • 属性2:小
  • 属性3:摇滚

在这种情况下,您的第一个搜索字词“黑色小石头”的查询将匹配属性1,2, 3中的“黑色”,然后执行相同的逻辑或操作搜索词中的其他两个字段。

您的查询实际上非常简单:

SELECT * FROM table
WHERE (attr1 = 'black' OR attr2 = 'black' OR attr3 = 'black')
AND (attr1 = 'small' OR attr2 = 'small' OR attr3 = 'small')
AND (attr1 = 'rock' OR attr2 = 'rock' OR attr3 = 'rock');

此时,您依赖于发出此查询的编程语言中的逻辑来按搜索项对显示的数据进行排序,您可以在其中测试第一个属性(类似Python的伪代码):

search_terms = split(search_term, " ")
ordered_results = [
   [x for x in results if x["attr1"] == search_terms[0]],
   [y for y in results if x["attr2"] == search_terms[1]],
   [z for z in results if z["attr3"] == search_terms[2]]
]
for result_set in ordered_results:
   for r in result_set:
      # Display the result.