0

データベースで fname と lname を検索するための jQuery Autocomplete (jQueryUI ではない) があります。現時点では、名を検索してから除外し、姓を検索できるのは素晴らしいことです。しかし、それを逆に取得する方法はありますか?

すなわち。Crystal を検索すると、Crystal Santos、Crystal Wickers、Crystal Hayes など
が表示されますが、Santos を検索すると、Santos Rameros、Santos Riveria などが表示されます (Santos が fname であると仮定します)。

とにかくこれを変更することはありますか?fname と lname の両方をフィルタリングします。

また、列内を検索することはできますか? 部門をフィルタリングするものがありますが、一部の部門には複数の値があります。2 番目に移動する前に、1 番目のみを検索します。

すなわち。Medical office controller を検索するには、最初に MEDICAL を検索する必要があります。Controller または Office を検索して、その結果を表示させることはできません。

説明が必要かどうか教えてください。

ハンドラーASHX

public void ProcessRequest (HttpContext context) {
    string prefixText = context.Request.QueryString["q"];
    using (SqlConnection conn = new SqlConnection())
    {
        conn.ConnectionString = ConfigurationManager.ConnectionStrings["Rollup2ConnectionString"].ConnectionString; 
        using (SqlCommand cmd = new SqlCommand())
        {
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "SP_AUTOCOMPLETE";                           
            cmd.Parameters.Add(new SqlParameter("@SearchText", SqlDbType.VarChar));      
            cmd.Parameters["@SearchText"].Value = prefixText;             
            cmd.Connection = conn;           
            StringBuilder sb = new StringBuilder();      
            conn.Open();           
            using (SqlDataReader sdr = cmd.ExecuteReader())           
            {               
                while (sdr.Read())   
                {                    
                    sb.Append(sdr["NUID"].ToString() + " ").Append(sdr["FNAME"].ToString() + " ").Append(sdr["LNAME"].ToString() + " ")                       
                        .Append(Environment.NewLine);          
                }        
            }            
        conn.Close();            
        context.Response.Write(sb.ToString());  
        }

    }
}

public bool IsReusable {
    get {
        return false;
    }
}

これは現在、fname lname 用のものです。部門用のものは、フィールドの変更を除いてまったく同じです。

ストアド プロシージャ名

@SearchText VARCHAR(255)
AS
BEGIN

SET NOCOUNT ON;
SELECT RTRIM(NUID) NUID, RTRIM(FNAME) FNAME, RTRIM(LNAME) LNAME 
FROM T_USER 
WHERE NUID like @SearchText + '%' OR FNAME like @SearchText + '%' OR LNAME like @SearchText + '%'

END

ストアド プロシージャ部門

@SearchText VARCHAR(255)
AS
BEGIN

SET NOCOUNT ON;
SELECT RTRIM(DEPT_DESC) DEPT_DESC, RTRIM(DEPT_ID) DEPT_ID
FROM T_ROLLUP_DEPT
WHERE DEPT_ID like @SearchText + '%' OR DEPT_DESC like @SearchText + '%'

終わり

4

1 に答える 1

2

それはデータベースの問題です。ストアド プロシージャに戻って、OR 句を追加する必要があります。

WHERE (FNAME LIKE '%SearchText%') OR (LNAME LIKE '%SearchText%')

SQL ステートメントを調整した後、「Santos」と入力すると、Crystal Santos、Santos Rameros、Santos Riveria などが表示されるようになりました。

質問の 2 番目の部分でも、SQL ストアド プロシージャを調整する必要があります。LIKE '%%' を WHERE 句に追加するだけです。したがって、ユーザーが「Controller」を検索すると、Medical Controller Officer が表示されます。

于 2012-08-07T18:12:15.757 に答える