Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何将2个或多个Sqflite查询与逻辑运算符组合?_Flutter_Sqlite_Dart_Sqflite - Fatal编程技术网

Flutter 如何将2个或多个Sqflite查询与逻辑运算符组合?

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

我目前正在尝试将两个查询的结果合并到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 {

  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个可能性的查询,因为它非常复杂和具体,我不会在这里发布它。另外,如果有更通用或更简单的方法,请写下你的答案:)