小编Sam*_*Sam的帖子

SQLite - 如何返回包含包含一个或多个字符串的文本字段的行?

我需要查询SQLite数据库中的表,以返回表中与给定单词集匹配的所有行.

更确切地说:我有一个包含约80,000条记录的数据库.其中一个字段是文本字段,每条记录大约100-200个字.我想要做的是获取200个单词关键字{"apple","orange","pear",...}的列表,并检索表中包含至少一个的所有记录的集合描述列中的关键字术语.

显而易见的方法是使用以下方法:

SELECT stuff FROM table 
WHERE (description LIKE '% apple %') or (description LIKE '% orange %') or ... 
Run Code Online (Sandbox Code Playgroud)

如果我有200个术语,我最终会看到一个大而讨厌的SQL语句,在我看来是笨拙的,糟糕的做法,并且不奇怪需要花费很长时间来处理 - 每1000条记录超过一秒.

这个答案更好的SQLite Select语句的性能似乎接近我所需要的,因此我创建了一个索引,但根据http://www.sqlite.org/optoverview.html sqlite如果LIKE不使用任何优化运算符与开头%通配符一起使用.

不是SQL专家,我假设我这样做是愚蠢的.我想知道具有更多经验的人是否可以建议一种更明智,也许更有效的方法来做到这一点?

或者,我可以使用更好的方法解决问题吗?

sqlite performance select sql-like

5
推荐指数
1
解决办法
1万
查看次数

C++ - 为什么这个成员需要声明为static?

这让我疯了.我得到一个"没有匹配函数调用'WordCloud :: WordCloud()'"错误.似乎正在调用默认构造函数,但由于我没有定义一个,因此抛出了错误.

构造函数是:

WordCloud( map<string, int> *source ); 
Run Code Online (Sandbox Code Playgroud)

在主cpp文件中,错误发生在指示的行上

class FontTestingApp : public AppBasic 
{                                      // <-- error was appearing on this line
public:
  void setup();
  void mouseDown( MouseEvent event ); 
  void update();
  void draw();

  map<string, int> wordList;
  WordCloud wc;        // comment out this line and it compiles
};
Run Code Online (Sandbox Code Playgroud)

所以,我猜测在实例化FontTestingApp类时实例化了一个WordCloud对象.

如果我注释掉这条线

WordCloud wc;
Run Code Online (Sandbox Code Playgroud)

然后它编译.

为了解决它,我终于将线路改为

static WordCloud wc;
Run Code Online (Sandbox Code Playgroud)

那编译.

我真的不知道为什么,而且这还不够好:)如果有人能解释这里发生了什么,我会非常感激.我顺便使用libCinder(libcinder.org)

c++ static-members

1
推荐指数
1
解决办法
309
查看次数

标签 统计

c++ ×1

performance ×1

select ×1

sql-like ×1

sqlite ×1

static-members ×1