我正在用分号(;
)符号搜索值。所以我有:
SELECT * FROM table WHERE value MATCH '; "+lookingFor+"*'
它在SQLite中给出了逻辑错误。如何解释程序“;”不是为了打破代码?我做错了什么?
PS。值列示例:
apple; orange; banana
pineapple; watermelon
这是查询:
query = "SELECT id AS _id,
entry_id ,
re_value,
ke_value,
g_value
FROM search_eng_fts
WHERE g_value MATCH '"
+ lookingFor+ "* OR
; "+lookingFor+"*'
ORDER BY length(g_value)
LIMIT 100";
答案 0 :(得分:2)
答案 1 :(得分:2)
MATCH运算符是match()应用程序定义函数的特殊语法。默认的match()函数实现会引发异常,对任何事情都没有用。但扩展可以使用更有用的逻辑覆盖match()函数。
您是否考虑过不将值存储为分隔字符串,而是使用关系数据库,因此每个值在新表中都有自己的行。
而不是
<强>Ť强>
TID Name Value
1 Test apple; orange; banana
2 Test2 pineapple; watermelon
你有两张桌子,
T - 存储密钥信息
TID Name
1 Test
2 Test2
TValues - 将带有链接的值存储回 T
TID Name
1 apple
1 orange
1 banana
2 pineapple
2 watermelon
这样您的查询就变成了:
SELECT T.TID, T.Name, TValues.Name
FROM T
INNER JOIN TValues
ON T.TID = TValues.TID
WHERE TValues.Name = 'apple';
如果您需要返回单个字符串,可以在SQLite中使用GROUP_CONCAT:
SELECT T.TID, T.Name, GROUP_CONCAT(TValues.Name, '; ') AS Value
FROM T
INNER JOIN TValues
ON T.TID = TValues.TID
GROUP BY T.TID, T.Name;
<强> Examples on SQL Fiddle 强>