gpt4 book ai didi

sqlite 查询 - 如何从按范围过滤的单行中获取多个结果?

转载 作者:行者123 更新时间:2023-12-01 23:18:30 26 4
gpt4 key购买 nike

我对编程很陌生,渴望使用 cocos2dx 和 sqlite 制作游戏。但我遇到了这个问题,我找不到示例或如何完成它。

我想做的第一件事是从已按范围过滤的表中随机选择一行。例如有一个有 100 行的表。如果我在 D 列的值 1 ~ 10 之间进行过滤,则会产生 20 行。我想从这 20 个中随机选择其中一个。

其次,对于随机选择的行,我想收集 5 个不同的值,但到目前为止,我无法找到有关如何收集它们的工作示例。

这是我尝试想出的代码,但不起作用:

  • 查询
int MinColumnD = 1;
int Max ColumnD = 10;
int Dice = ( rand() % 19 ) + 1;
char sql_query[100];
sprintf(sql_query, "SELECT A, B, C, D, E FROM SQList WHERE (ColumnD BETWEEN %d AND %d) ORDER BY RANDOM() LIMIT 1", MinColumnD, MaxColumnD);
std::list<INFO> details;
sqlite3_exec(DB, sql_query, CallBack, &details, &errorMessage);

*感谢 CL 的评论,我更新了上述查询以包含 order by random() Limit 1。但是,当我运行它并进入该部分时,我在 xcode 上收到此错误:

 Thread 1
0 sqlite3_exec
0x54cbd8: movl 60(%ebx), %eax < Thread 1: EXC_BAD_ACCESS (code=1, address=0x444e418e)

这似乎只有当我将“ORDER BY RANDOM()”包含在查询中时才会发生

  • 回调
int CallBack( void * pOutCount, int argc, char ** argv, char **azColName ){

std::list<Class::INFO> *pList = (std::list<Class::INFO >*)pOutCount;
Class::INFO items;
items._A = argv[0];
items._B = atoi(argv[1]);
items._C = atoi(argv[2]);
items._D = atoi(argv[3]);
items._E = atoi(argv[4]);
pList->push_back( items );
return 0;

}
  • 结构
struct Class::INFO {

std::string _A;
int _B;
int _C;
int _D;
int _E;

};

*也许因为 sqlite 查询不完整,所以我没有正确获得结果,但我不确定如何准确地从 std::list 获取返回的值列表。认为在查询之后我可以调用列表内的组件来获取如下值是否正确:

std::string A = details._A;
int B = details._B;
int C = details._C;
int D = details._D;
int E = details._E;

请帮忙!

最佳答案

您不知道过滤结果中最终出现了哪些rowid,因此您无法使用它们。

要从过滤结果中获取一些随机记录,请先对它进行排序 randomly ,然后 take the first record其中:

SELECT A, B, C, D, E
FROM SQList
WHERE ColumnD BETWEEN ? AND ?
ORDER BY RANDOM()
LIMIT 1

关于sqlite 查询 - 如何从按范围过滤的单行中获取多个结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13498320/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com