我有这个问题,我一直推迟解决,但现在是时候了.
我有一个基本的字典程序.它有一个UISearchBar和一个UITableView.它的工作方式除了在设备上运行时它会导致键盘滞后.(模拟器很好,当然)我有两种类型的搜索.按你型和回程.我发现两者都需要大约相同的时间来返回结果,但是As-you-type会使键盘滞后.
我有UISearchBar textDidChange,它接受searchText并将其发送到执行所有sqlite提升的搜索方法,将结果放入Array中.重新加载表格.
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
if((searchType == SEARCH_AS_YOU_TYPE) && ([searchText length] >= 2)){
NSString *myKeyword = [NSString stringWithFormat:@"%@", searchText];
[self search:myKeyword];
[myTableView reloadData];
}
}
Run Code Online (Sandbox Code Playgroud)
我将结果限制为50.我的SQL查询使用了LIKE和OR,还没有办法解决.
SELECT WORD_ID, DEFIN, PINYIN, SIMP, TRAD from WORDS where DEFIN LIKE "%to dog %" OR DEFIN LIKE "%dog" OR DEFIN LIKE "%dog%" ORDER BY DEFIN LIMIT 50
Run Code Online (Sandbox Code Playgroud)
我也尝试将[myTableView reloadData]移动到搜索方法中,希望键盘至少不会滞后.没有喜悦.遗憾的是,我知道sqlite基本上是检查每一行,当它使用like运算符时.但是对于80人来说3-4秒似乎有点慢.
任何想法,想法,意见或建议将不胜感激!
我看到LIKE运算符可以在我切换PRAGMA case_sensitive_like = ON时优化查询.我测量,它确实有效,查询"LIKE someth%"在分区大的二进制索引表上变快十倍.但问题是我的库作为我的应用程序的附加组件实现,它维护自己的表与它连接的任何数据库.所以问题是
有没有办法反转SQL Like运算符,以便它向后搜索一个字段?例如,我在一个看起来像这个"Xbox 360视频游戏"的字段中有一个值.如果我写下面的查询,它会返回结果.
SELECT id FROM table WHERE title like "%Xbox%Game%"
Run Code Online (Sandbox Code Playgroud)
但是,当我这样搜索时,它没有找到任何结果.
SELECT id FROM table WHERE title like "%Video%Xbox%"
Run Code Online (Sandbox Code Playgroud)
我需要它在任何方向匹配.我怎么能绕过这个?
好的,我已经使用了一段时间了,我有点卡住了。
也许我正在做错所有事情!
基本上我有一个搜索字段的查询。一般的想法是根据LIKE %%选择结果,同时仍然将精确匹配放在第一位。
因此,例如,如果您搜索47,则我希望显示ID,姓氏或company_name中带有47的所有内容,但是ID号为47的结果应位于顶部,如果键入姓氏,则结果应相同。
请在下面查看我的代码,这可能有助于澄清我的问题。
SELECT id,
IF(company_name IS NOT NULL AND company_name <> '', company_name, surname) AS name,
first_name, country, phone1, isowner, isholidayrenter, isproholidayrenter,
islongtermrenter, isprolongtermrenter, isprobuyer, isbuyer
FROM clients
WHERE id LIKE '$search' OR surname LIKE '$search' OR company_name LIKE '$search'
union all
SELECT id,
IF(company_name IS NOT NULL AND company_name <> '', company_name, surname) AS name,
first_name, country, phone1, isowner, isholidayrenter, isproholidayrenter,
islongtermrenter, isprolongtermrenter, isprobuyer, isbuyer
FROM clients
WHERE id LIKE '%$search%' AND id NOT LIKE …Run Code Online (Sandbox Code Playgroud) 所以我一直在寻找,但我似乎无法找到一个看似简单且可能是常见问题的答案.在SQLite中,我有一个我想通过用户定义的搜索文本传递的查询.
search = xChatMessageSplit[2]
c.execute("SELECT * FROM captured WHERE Nick=? AND Name LIKE '%search%'",(xChatNick,search))
Run Code Online (Sandbox Code Playgroud)
显然语法或其他什么是不正确的,因为我收到错误,但我想基本上允许用户为字符串定义搜索词,"搜索".我该怎么做呢?我尝试使用REGEXP,但我似乎无法弄清楚如何定义函数,所以我想我会用LIKE,因为它已经在SQLite3中实现
我想通过在前两位数之后添加0来延长几个事件编号.前两位数代表年份.防爆.我想将121023更改为1201023.所以我想通过添加0 in来将以12开头的所有事件编号(Varchar)更改为以120开头,以将所有事件编号延长一.
这是我到目前为止:
UPDATE EVENT
SET EVNT_URI = '***what do I put here?***'
WHERE EVNT_URI IN(SELECT EVNT_URI FROM EVENT WHERE EVNT_URI LIKE '12%')
Run Code Online (Sandbox Code Playgroud)
我这样做的原因是12表示年份,事件编号接近130000.所有事件编号都是6位数,我想通过在第一个数字之后加零来将它们更改为7位数代表年份.
我有一个包含资源路径的列,如下所示:
/apiv3/widgets/100
/apiv3/widgets/search
/apiv3/widgets/new
Run Code Online (Sandbox Code Playgroud)
我试图得到一个LIKE或REG_EX,只会匹配以数字结尾的字符串
我尝试了一些例如:
LIKE '\/apiv3\/widgets\/[0-9]%'
LIKE '\/apiv3\/widgets\/[^0-9]%'
Run Code Online (Sandbox Code Playgroud)
如何匹配仅以任意长度的数值结尾的路径?
基本上我有一组用户可以搜索的字段.所以我写了一个表格的查询:
SELECT *
FROM my_addr_vw
WHERE fname LIKE :l_fname
AND mname LIKE :l_mname
AND lname LIKE :l_lname;
Run Code Online (Sandbox Code Playgroud)
当用户未将任何值传递给任何条件时,我假设为'%'.
这样做,如果一个记录有NULL或没有值,比方说,mname - 然后记录下降....什么是这个问题的一个很好的解决方案没有匹配!
我正在使用OrientDB studio来创建某种类型的顶点(NodeType1).我使用OrientDB studio创建了29个顶点,当我运行时:
select count(*) from NodeType1
Run Code Online (Sandbox Code Playgroud)
我得到29条记录.
但是,当我跑:
select * from NodeType1
Run Code Online (Sandbox Code Playgroud)
我得到了只有20条记录的清单.
有没有人遇到过这个?
我有以下代码.我不太明白只有第一个EXEC声明有结果.有人可以帮忙解释一下吗?
USE tempdb;
GO
IF OBJECT_ID('dbo.students') IS NOT NULL
DROP TABLE dbo.students;
CREATE TABLE dbo.students
(
id INT NOT NULL IDENTITY PRIMARY KEY,
name NCHAR(10)
);
INSERT INTO dbo.students(name)
SELECT c FROM(VALUES(N'ab'), (N'cd'), (N'ef'), (N'gh')) AS DATA(c);
SELECT *, DATALENGTH(name)FROM dbo.students;
GO
IF OBJECT_ID(N'dbo.check_address') IS NULL
BEGIN
EXEC('CREATE PROCEDURE dbo.check_address AS SELECT ''to be replaced''');
END;
GO
ALTER PROCEDURE dbo.check_address @name NCHAR(10)
AS
BEGIN
SELECT * FROM dbo.students WHERE name LIKE N'%' + @name + N'%';
END;
GO …Run Code Online (Sandbox Code Playgroud) sql-like ×10
sql ×5
sqlite ×3
mysql ×2
iphone ×1
keyboard ×1
null ×1
optimization ×1
oracle ×1
orientdb ×1
orientdb-2.1 ×1
performance ×1
php ×1
postgresql ×1
python ×1
sql-server ×1
sql-update ×1
string ×1
variables ×1