Flutter 如何将2个或多个Sqflite查询与逻辑运算符组合?
我目前正在尝试将两个查询的结果合并到Flatter中。以下是查询:Flutter 如何将2个或多个Sqflite查询与逻辑运算符组合?,flutter,sqlite,dart,sqflite,Flutter,Sqlite,Dart,Sqflite,我目前正在尝试将两个查询的结果合并到Flatter中。以下是查询: Future<List> filterExercises({ List<String> equipmentFilter, List<String> muscleFilter, int custom, //0 = false, 1 = true int recent, //0 = false, 1 = true String orderBy, }) async
Future<List> filterExercises({
List<String> equipmentFilter,
List<String> muscleFilter,
int custom, //0 = false, 1 = true
int recent, //0 = false, 1 = true
String orderBy,
}) async {
Database db = await initDatabase();
final muscleRes = await db.query(
'exercises',
where: "targetMuscle IN (${('?' * (muscleFilter.length)).split('').join(', ')})",
whereArgs: muscleFilter,
);
final equipmentRes = await db.query(
'exercises',
where: "equipment IN (${('?' * (equipmentFilter.length)).split('').join(', ')})",
whereArgs: equipmentFilter,
);
return finalResult; //need to combine the results with a logical AND somehow
}
未来过滤器练习({
列出设备过滤器,
列出肌肉过滤器,
int custom,//0=false,1=true
int recent,//0=false,1=true
字符串orderBy,
})异步的{
Database db=await initDatabase();
final muscleRes=wait db.query(
"演习",,
其中:“targetMuscle IN(${('?'*(muscleFilter.length)).split(''.join(',')})”,
地点:muscleFilter,
);
最终设备=等待db.query(
"演习",,
其中:“设备在(${('?'*(equipmentFilter.length)).split(''.join(',')})”中,
其中RGS:equipmentFilter,
);
return finalResult;//需要将结果与逻辑和
}
我知道可以选择使用逻辑OR/AND的rawQuery,但这不适用于我的情况。
用户应该可以选择不同的属性,从而过滤列表。我正在寻找一种方法,将参数传递给这个函数,并根据传递的参数查询我的表,但在合并前两个查询时,我已经失败了
如何在这两个查询中添加逻辑AND?
此外:如何使用逻辑And添加更多属性并对最终结果排序?我设法找到了解决第一个问题的方法:
List<String> muscleFilter = ['Chest', 'Biceps'];
List<String> equipmentFilter = ['Machine', 'Cable'];
return db.rawQuery('''
select * from exercises
where targetMuscle in (${('?' * (muscleFilter.length)).split('').join(', ')})
and equipment in (${('?' * (equipmentFilter.length)).split('').join(', ')})
''',
muscleFilter + equipmentFilter
);
List muscleFilter=[‘胸部’、‘二头肌’];
列出设备过滤器=['Machine','Cable'];
返回db.rawQuery(“”)
从练习中选择*
其中targetMuscle in(${('?'*(muscleFilter.length)).split('').join(',')})
和(${('?'*(equipmentFilter.length)).split('').join(',')})中的设备
''',
肌肉过滤器+设备过滤器
);
我最终使用了一个带有非常复杂字符串操作的rawquery来处理16个可能性的查询,因为它非常复杂和具体,我不会在这里发布它。另外,如果有更通用或更简单的方法,请写下你的答案:)