Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 通过行选择确定SQLite组_Android_Sqlite_Group By_Android Sqlite_Sql Order By - Fatal编程技术网

Android 通过行选择确定SQLite组

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%。 在“描述”列中匹配。也许两者都

假设我试图在两个AutoCompleteTextView中键入产品时搜索产品列表。在这种情况下,假设制造商中为H,描述中为PR

现在,数据库有HP打印机,也有HP笔记本电脑、服务器等。此外,假设有一家像日立这样的制造商,它有一个H,但我当前的数据库没有任何打印机,但它有一些日立条目,可能是扫描仪

所以,这大致就是我认为合乎逻辑的结果顺序:

首先在两列中匹配。可能用户正在搜索HP打印机,它应该是第一个,因为匹配分为两列,按从字符串开头开始的最佳字母顺序排列,如x%。 在“描述”列中匹配。也许两者都不匹配,所以在此之后,我想列出所有连接了打印机的制造商。 “制造商”列中以最佳字母匹配开头的匹配项。也许用户想在数据库中输入一台新的日立品牌打印机,所以我想提出这个建议。 假设他们在打印机上输入了PR,在HP/Hitachi的开头输入了H。我可以过滤除打印机之外的所有内容,因此我的结果是:

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