Android 通过行选择确定SQLite组
假设我试图在两个AutoCompleteTextView中键入产品时搜索产品列表。在这种情况下,假设制造商中为H,描述中为PR 现在,数据库有HP打印机,也有HP笔记本电脑、服务器等。此外,假设有一家像日立这样的制造商,它有一个H,但我当前的数据库没有任何打印机,但它有一些日立条目,可能是扫描仪 所以,这大致就是我认为合乎逻辑的结果顺序: 首先在两列中匹配。可能用户正在搜索HP打印机,它应该是第一个,因为匹配分为两列,按从字符串开头开始的最佳字母顺序排列,如x%。 在“描述”列中匹配。也许两者都不匹配,所以在此之后,我想列出所有连接了打印机的制造商。 “制造商”列中以最佳字母匹配开头的匹配项。也许用户想在数据库中输入一台新的日立品牌打印机,所以我想提出这个建议。 假设他们在打印机上输入了PR,在HP/Hitachi的开头输入了H。我可以过滤除打印机之外的所有内容,因此我的结果是:Android 通过行选择确定SQLite组,android,sqlite,group-by,android-sqlite,sql-order-by,Android,Sqlite,Group By,Android Sqlite,Sql Order By,假设我试图在两个AutoCompleteTextView中键入产品时搜索产品列表。在这种情况下,假设制造商中为H,描述中为PR 现在,数据库有HP打印机,也有HP笔记本电脑、服务器等。此外,假设有一家像日立这样的制造商,它有一个H,但我当前的数据库没有任何打印机,但它有一些日立条目,可能是扫描仪 所以,这大致就是我认为合乎逻辑的结果顺序: 首先在两列中匹配。可能用户正在搜索HP打印机,它应该是第一个,因为匹配分为两列,按从字符串开头开始的最佳字母顺序排列,如x%。 在“描述”列中匹配。也许两者都
HP | Printer
RICOH | Printer
BROTHER | Printer
但我没有日立
或者我可以拿出描述过滤器,列出每个制造商,首先按制造商描述匹配项排序,然后得到如下结果:
RICOH | Printer
BROTHER | Printer
HAIER | TV
HITACHI | Scanner
HP | PC
HON | Filing Cabinet
现在,GROUP BY已分组到包含HP的行中,但对于PC,而不是打印机,因此将在稍后的过程中对其进行排序
是否有任何方法可以筛选所选的行分组?我想这只是第一个结果。这就是我希望它看起来的样子:
HP | Printer
RICOH | Printer
BROTHER | Printer
HAIER | TV
HITACHI | Scanner
HON | Filing Cabinet
这就是我目前正在玩的东西,加上或减去AND INSTRUPPERdescription,UPPERPR!=WHERE子句中的0:
p、 对于那些来自不同SQL背景的人来说,s.| |与CONCAT类似。我认为您不需要如此复杂的查询。 使用查询中的大小写表达式定义优先级,以便您可以筛选和排序:
SELECT t._id, t.manufacturer, t.description
FROM (
SELECT _id, manufacturer, description,
CASE
WHEN INSTR(UPPER(description), "PR") != 0 AND UPPER(manufacturer) LIKE "H%" THEN 1
WHEN INSTR(UPPER(description), "PR") != 0 AND INSTR(UPPER(manufacturer), "H") != 0 THEN 2
WHEN INSTR(UPPER(manufacturer), "H") != 0 THEN 3
WHEN INSTR(UPPER(description), "PR") != 0 THEN 4
ELSE 5
END priority
FROM `tblProducts`
) t
WHERE t.priority <= 4
ORDER BY t.priority
将PR和H替换为用户键入的值 你为什么使用分组方式?您的需求中不涉及聚合。此外,你还必须明确你的优先顺序。它们的定义是否与查询中ORDERBY子句的大小写表达式类似?
SELECT t._id, t.manufacturer, t.description
FROM (
SELECT _id, manufacturer, description,
CASE
WHEN INSTR(UPPER(description), "PR") != 0 AND UPPER(manufacturer) LIKE "H%" THEN 1
WHEN INSTR(UPPER(description), "PR") != 0 AND INSTR(UPPER(manufacturer), "H") != 0 THEN 2
WHEN INSTR(UPPER(manufacturer), "H") != 0 THEN 3
WHEN INSTR(UPPER(description), "PR") != 0 THEN 4
ELSE 5
END priority
FROM `tblProducts`
) t
WHERE t.priority <= 4
ORDER BY t.priority