2011-02-10 87 views
0
  • 搜索字詞:黑色的小石頭
  • 搜索項B:黑巖小
  • 搜索詞語C:小巖黑

我想設計一個查詢將按照寫入條款的順序進行。現在我想要上述三個術語產生相同的結果,但我想要結果的順序來反映術語的順序。MySQL的查詢需要序列考慮

我只希望這是有道理的;如果沒有,請告訴我。

+1

對不起,沒有任何意義。你有你想要更改的特定查詢或搜索代碼嗎?作爲一般規則,SQL沒有自然語言搜索,所以搜索詞語排序的概念在沒有進一步解釋或現有搜索代碼的情況下是沒有意義的。 – SpliFF

+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.