我有一个搜索框,可以输入一些文本并返回数据库的结果,例如,如果我要搜索“John Smith”,那么所有John Smiths的记录都会出现。
但是,我想使搜索不那么具体,就像我只是搜索'John'那条记录一样。
这是我的问题:
cur = g.db.execute('SELECT name, id, location, education FROM accounts WHERE email=? COLLATE NOCASE OR name=? COLLATE NOCASE OR education=? COLLATE NOCASE', (query, query, query,))
正如您所看到的,它还返回搜索“名称”,但“位置”和“教育”,所以我希望关键字搜索也适用于这些。
感谢。
答案 0 :(得分:0)
您需要SELECT name, id, location, education FROM accounts WHERE email='John'
COLLATE NOCASE OR name LIKE '%John%' COLLATE NOCASE OR education='John'
COLLATE NOCASE
声明。您的SQL将如下所示:
LIKE
请注意OR name LIKE '%John%'
cur = g.db.execute('SELECT name, id, location, education FROM accounts WHERE email=? COLLATE NOCASE OR name LIKE ? COLLATE NOCASE OR education=? COLLATE NOCASE', (query, '%'+query+'%', query,))
OR
再次注意name
上的OR name LIKE ?
语句已更改:
'%'+query+'%'
但是,我们还改变了传递的参数:
%
这将以%
个字符包裹您的搜索字符串,允许您的字符串出现在字段中的任何位置。
要使用参数执行此操作,我们需要将参数括在通配符($loop = ...; // $loop is instantiated somewhere before this code
$this->app->singleton('React\EventLoop\LoopInterface', function() use ($loop) {
return $loop;
});
)