查询因多种条件而失败

时间:2017-05-16 21:13:19

标签: android sqlite sql-like

我有一个数据库,我已经实现了searchView来搜索其数据 使用此查询:

选择:

//rooms.name = ? OR rooms.name LIKE ? OR rooms.name LIKE ? OR rooms.name LIKE ?
    private static final String roomsWithSectorsByNameSelection =
        DeltaContract.RoomsEntry.TABLE_NAME +
                "." + DeltaContract.RoomsEntry.COLUMN_NAME + " = ? OR " +
                DeltaContract.RoomsEntry.TABLE_NAME +
                "." + DeltaContract.RoomsEntry.COLUMN_NAME + " LIKE ? OR " +
                DeltaContract.RoomsEntry.TABLE_NAME +
                "." + DeltaContract.RoomsEntry.COLUMN_NAME + " LIKE ? OR " +
                DeltaContract.RoomsEntry.TABLE_NAME +
                "." + DeltaContract.RoomsEntry.COLUMN_NAME + " LIKE ?";    

表:

roomsWithSectorsByNameQueryBuilder.setTables(
            DeltaContract.RoomsEntry.TABLE_NAME + " INNER JOIN " +
                    DeltaContract.SectorsEntry.TABLE_NAME +
                    " ON " + DeltaContract.RoomsEntry.TABLE_NAME +
                    "." + DeltaContract.RoomsEntry.COLUMN_SECTOR_ID + " = " +
                    DeltaContract.SectorsEntry.TABLE_NAME +
                    "." + DeltaContract.SectorsEntry._ID);

和查询:

    private Cursor getRoomsWithSectorsByName(Uri uri, String[] projection, String sortOrder) {

    String name = DeltaContract.RoomsEntry.getNameFromRoomsUri(uri);

    return roomsWithSectorsByNameQueryBuilder.query(deltaDbHelper.getReadableDatabase(),
            projection,
            roomsWithSectorsByNameSelection,
            new String[]{name, (name + "%"), ("%" + name + "%"), ("%" + name)},
            DeltaContract.SectorsEntry.TABLE_NAME + "." + DeltaContract.SectorsEntry.COLUMN_NAME,
            null,
            sortOrder
    );
}

对于大多数搜索,我尝试它的工作非常出色,但对于某些行,即使我输入整个单词也不起作用

BUT

如果我将选择更改为:

//rooms.name = ?
private static final String roomsWithSectorsByNameSelection =
    DeltaContract.RoomsEntry.TABLE_NAME +
            "." + DeltaContract.RoomsEntry.COLUMN_NAME + " = ?";

以及对此的查询:

private Cursor getRoomsWithSectorsByName(Uri uri, String[] projection, String sortOrder) {

String name = DeltaContract.RoomsEntry.getNameFromRoomsUri(uri);

return roomsWithSectorsByNameQueryBuilder.query(deltaDbHelper.getReadableDatabase(),
        projection,
        roomsWithSectorsByNameSelection,
        new String[]{name},
        DeltaContract.SectorsEntry.TABLE_NAME + "." + DeltaContract.SectorsEntry.COLUMN_NAME,
        null,
        sortOrder
);

}

删除所有喜欢,它工作正常,

应该注意的是,如果我使用不同的列搜索表,则第一个查询无法找到,它会起作用并返回行

还应注意,行中的数据存储在阿拉伯语中

所以请帮忙吗?谢谢

修改

例如: 在第一个状态下使用所有喜欢的查询,当我搜索第一行中显示的“رئيسمجلسالإدارة”时:

(图片编号一)

按名称搜索它只会获得类似的行:

(图片二)

但是当我按电话号码搜索时,它会找到它:

(图片编号三)

即使我用阿拉伯语写下电话号码:

(图片编号四)

这里是图像(由于声誉低造成的限制,将它们放在一个链接中)

the images

现在,当我更改查询并删除所有喜欢时,它只是找到它:

using the query with no likes

还应该注意的是,问题不仅限于此行,它确实发生在其他行也遵循相同的行为

1 个答案:

答案 0 :(得分:0)

解决了它,

问题发生的原因是查询中的group by参数, 我不知道为什么它会导致问题,但删除它只是解决了它所以我很高兴