我有一個搜索表單,用戶可以輸入和搜索記錄。在搜索欄的搜索關鍵詞是這種形式:光滑,木材,38 現在的實際問題是一個關鍵詞返回的記錄,當用戶鍵入時,他在第二個關鍵詞類型,記錄被返回,但是與該搜索不匹配的舊記錄也被返回。 如果他在38型,木這樣兩個記錄返回,但是當他衝型,邏輯上只有一條記錄應返回,但它不,它返回的藍色的爲好。 *每當用戶對SEARCH_KEYWORD或第二關鍵字輸入,3關鍵字結果應根據搜索詞進行過濾和遺憾的是沒有做這樣的*。 table1的結構是這樣的:問題訪問查詢和運營商不工作
id path name search_keyword
1 c:\my picture\ red door red;
2 c:\my picture\ red door 38;
3 c:\my picture\ red door wood;
4 c:\my picture\ red door 2500;
5 c:\my picture\ red door smooth
6 c:\my picture\ blue door blue ;
7 c:\my picture\ blue door 38;
8 c:\my picture\ blue door wood;
9 c:\my picture\ blue door 2600;
19 c:\my picture\ blue door smooth;
該表格包含檢索關鍵字,用戶可以爲SEARCH_KEYWORD輸入,並且可以得到的結果過濾器(多個搜索關鍵字); 想他鍵入開始光滑,木材38所以無論結果現在應該顯示當他輸入紅色/藍色或2500分之2600那麼結果應該是一個。
查詢這個樣子的:
select Distinct name from table1 where search_keyword like '%smooth%' And '% wood %' and '%red%' order by name
下面的代碼:
publi override list<result> retrunsearch(string search)
{
string[] search = pQuery.Split(',');
List <result> myresult = new List<result>();
for (int i = 1; i < search.Length; i++)
{
StringBuilder query = new StringBuilder();
query.Append(
string.Format("SELECT DISTINCT name,path FROM table1 WHERE search_keyword LIKE '%{0};%'", search[0])
);
// Add extra keywords
for (int i = 1; i < search.Length; i++)
{
query.Append(string.Format(" And '%{0};%'", search[i]));
}
// Add order by
query.Append(" ORDER BY name");
using (OleDbCommand command = new OleDbCommand(query.ToString(), sqlconConnection))
{
command.CommandType = CommandType.Text;
using (OleDbDataReader sdaResult0 = command.ExecuteReader())
{
while (sdaResult0.Read())
{
result restult1= new result();
result1.name = sdaResult0.String(0);
myresult.add(result1);
}
sdaResult0.Close();
}
}
return myresult;
}
public class result{
public result()
{
}
public string name{get;set;}
}
這似乎是一個合併錯誤。只要刪除外部循環。 – SlavaGu 2011-04-27 15:06:41
@SlavaGu我已經拿出了外部循環,但我仍然得到了混淆結果:( – safi 2011-04-27 15:12:46