我有一张这样的桌子:
database.execSQL("CREATE TABLE IF NOT EXISTS food_table (food_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , food_name CHAR, food_raw CHAR)");
我有一个像这样的String数组:
public static ArrayList<String> rawsNames = new ArrayList<String>();
现在我想在表中搜索,如果所有未加工的食物都在rawsNames中,则返回food_name。
我这样做:
String raws = AdapterNotes.rawsNames.toString().replace("]", "").replace("[", "");
Cursor cursor = G.database.rawQuery("select * from food_table WHERE food_raw LIKE '%" + raws + "%' ", null);
while (cursor.moveToNext()) {
String name = cursor.getString(cursor.getColumnIndex("food_name"));
但是,如果改变了食物的原料,那就行不通了。
请帮我。
最佳答案
看来food_table
包含以下字段:food_id
:分配给食品的唯一IDfood_name
:食品名称food_raw
:用,
分隔的成分
现在,由于成分可能相同,但顺序与数据库中存储的顺序不同,因此简单的WHERE LIKE %"a, b, c"%
不会起作用,因为b, a, c
也是相同食物的有效成分(只是顺序是不同的)。
因此,您需要匹配每个单独的成分,而不是整体上的所有成分:
String req = "";
for(String rawName : rawNames)
req += " food_raw LIKE %"+rawName+"% AND";
if(req.length() > 4)
req = req.substring(0, req.length()-4); // to remove last " AND"
String query = "SELECT * FROM food_table WHERE "+req;
使用
query
,无论项目顺序如何,您都应该能够获得食物名称。