3

私のアプリケーションには検索機能が含まれており、データベース内のコンテンツを検索します。LIKE検索の弱点は、1つのタグのみを使用して検索できることです。たとえば、「cat」のみを検索でき、selectステートメントでクエリを使用しているため、データベースに「cat」という単語を含むコンテンツが返されます。多くのタグを使用して検索するにはどうすればよいですか?たとえば、「黄色いボールを持った猫」。そのため、挿入された文字列に関連する結果が返され、一部のタグがデータベースに存在しない場合は無視されます。より明確にするためAboutCatに、データベースにサンプルテーブルを作成しました。id、c_question、c_keywordの3つの列が含まれています。

id = 1

c_question =猫の口ひげを引っ張るとどうなりますか?

c_keyword=猫の口ひげプル

c_keyword「cat」、「cat mustache」、「mustache pull」など、列のキーワードのいずれかを使用して検索すると、が表示されますc_question。しかし、「猫の引っ張り」や「口ひげの猫」を検索しても表示されません。それで、それが一致し、c_keyword列内に存在する限り、単語の順序を無視して検索するにはどうすればよいですか?以下は私のコードです...私の説明が明確でないかどうか私に尋ねてください。

btnWanita.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            results.clear();

            if(txtWnta.getText().toString().matches(""))
            {
                Toast.makeText(WanitaActivity.this, "Sila masukkan kata kunci", Toast.LENGTH_SHORT).show();

            }

            else
            {
            OpenHelper helper = new OpenHelper(getApplicationContext());
            database = helper.getWritableDatabase();

            try{                    

                String sql = "select * from " +
                            OpenHelper.DB_TABLE_WANITA + " where " + OpenHelper.KEY_WANITA +
                            " like " + "'%" + txtWnta.getText().toString() + "%';";
                Cursor c = database.rawQuery(sql, null);

                if(c!= null)
                {
                    c.moveToFirst();
                    int soalanColumn = c.getColumnIndex(OpenHelper.MASALAH_WANITA);
                    int getId = c.getColumnIndex(OpenHelper.ID_WANITA);
                    if(c.isFirst())
                    {
                        do
                        {
                            idList.add(c.getLong(getId));
                            results.add(c.getString(soalanColumn));


                        }while(c.moveToNext());
                    }

                    adapter.updateList(results);
                }

            }

                catch(SQLException e)
                {
                    Log.v("caer ", e.toString());   
                }
            }

私の検索はここに行きます...

String sql = "select * from " +
                            OpenHelper.DB_TABLE_WANITA + " where " + OpenHelper.KEY_WANITA +
                            " like " + "'%" + txtWnta.getText().toString() + "%';";
4

1 に答える 1

2

文字列を別々の単語に分割してから、各単語に一致するWHERE句を動的に作成する必要があります。このようなもの:

String sql = 
"select * from " 
+ OpenHelper.DB_TABLE_WANITA 
+ " where " 
+ OpenHelper.KEY_WANITA + " like " + "'%cat%'" 
+ " or "
+ OpenHelper.KEY_WANITA + " like " + "'%mustache%'"
+ " or "
+ OpenHelper.KEY_WANITA + " like " + "'%pull%'"
+";"
;
于 2013-02-28T17:34:52.180 に答える