gpt4 book ai didi

sql查询精确搜索比别人

转载 作者:行者123 更新时间:2023-12-03 18:32:26 24 4
gpt4 key购买 nike

我有很多列的表。但我们在这里考虑 2 列。
姓名是第一栏第2栏 .表名是字表 .我只想根据下面匹配的 2 列搜索 50 个记录库。

如果我输入 "auto "那么结果应该是。

"auto"
"autoa"
"autoab"
.
.
.
Etc

如果我输入 “行家” , 结果应该是
"maver"
"mavera"
"maverr"
"maverx"
"maverydsdb"

表示第一个单词应该与升序后的其余单词完全匹配。并且应该从任何一个牵引柱进行匹配。

以下是我的查询,但不起作用。
searchWord(value) async {
var res = await db.rawQuery("SELECT *
FROM WordTable
WHERE (Column1 LIKE '$value%' OR Column2 LIKE '$value%')
ORDER BY Column1 ASC, Column2 ASC
LIMIT 50");

List<Word> list =
res.isNotEmpty ? res.map((c) => Word.fromJson(c)).toList() : [];
return list;
}

得到结果但不是预期的顺序。

我哪里错了?请指导我。

I'm coming from mobile platform and using "SQFLite" data base so for me query is important.

最佳答案

这里有两个技巧。第一种是按表中实际不存在的东西排序,即“$value”之后的单词部分。您可以使用sqlite substrsqlite length找到那个部分,比如 substr(column,length($value)) .由于期望的结果是“整个”字,因此可以将其与连接运算符 || 重新组合在一起。 ,类似于 $value||substr(column,length($value)) .

第二个技巧是选择column1column2到相同的结果字段中,以便它们可以作为一列排序。一种方法是使用 UNION询问。

使用这样的数据:

column1     column2
---------- ----------
autob autoa
mavery autoc
maverz mavera
autoz maverq
autoa autob

这个查询:
select 'auto'||substr(column1,length('auto') + 1) word
from wordTable
where column1 like 'auto%'
UNION
select 'auto'||substr(column2,length('auto')+1)
from wordTable
where column2 like 'auto%'
order by 1

返回此结果:
word
----------
autoa
autob
autoc
autoz

附录

经过进一步思考,我宁愿过分强调它。如果您在与以下相同的结果列中使用具有匹配“单词”的 UNION,则第一个“技巧”没有实际意义:
SELECT column1,* 
from wordTable
where column1 like '$value%'
UNION
SELECT column2,*
from wordTable
where column2 like '$value%'
ORDER BY 1

关于sql查询精确搜索比别人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56001527/

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