我有一张这样的表:
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"));
但是当食物原料发生变化时,它就无法发挥作用。
请帮帮我。
答案 0 :(得分:0)
food_table
似乎包含字段:
food_id
:分配给食品项目的唯一ID
food_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
,您应该能够获得食物名称,无论项目顺序如何。