【问题标题】:android searching with multiple keywordsandroid搜索多个关键字
【发布时间】:2013-02-15 00:09:41
【问题描述】:

我的应用程序包含搜索功能,它将搜索数据库内的内容。我搜索的弱点是,我只能使用一个标签进行搜索,例如我只能搜索“cat”,它会在我的数据库中返回包含单词“cat”的内容,因为我在使用 LIKE 查询期间选择语句。如何使用多个标签进行搜索?例如“带黄球的猫”。这样,它将返回与插入的字符串相关的结果,如果数据库中不存在某些标签,它将忽略。为了更清楚,我在我的数据库中创建了一个示例表AboutCat。它包含 3 列,即 id、c_question 和 c_keyword。

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() + "%';";

【问题讨论】:

    标签: android search tags


    【解决方案1】:

    您需要将字符串拆分为单独的单词,然后动态构建 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%'"
    +";"
    ;
    

    【讨论】:

    • 根据您的要求对 WHERE 子句使用 AND/OR。
    • 有可能吗..??因为我会从用户输入的editText txtWnta.getText().toString()..中获取关键字。是不是我应该在每个LIKE查询之后添加代码LIKE你回答..?
    • 解析您的字符串并将其拆分为单词并存储在一个数组中。使用“foreach”循环根据需要动态构建 where 子句。
    • 好的...我了解解析和拆分成单词,但是我如何将它放在foreach 循环中,因为它是关于在我的数据库中检索数据...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-07
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多