【问题标题】:SQLite query to perform search and multiple filters in JavaScript在 JavaScript 中执行搜索和多个过滤器的 SQLite 查询
【发布时间】:2017-03-23 18:40:50
【问题描述】:

我有一组数据(表格)如下图。

+---------+---------+---------+-----------+
|  Name   | Surname | Country |  Status   |
+---------+---------+---------+-----------+
| Ryan    | Gosling | U.S.A.  | Citizen   |
| Raymond | Green   | Germany | Citizen   |
| Andrew  | Hollow  | U.S.A.  | Immigrant |
| Sam     | Giggs   | U.S.A.  | Citizen   |
+---------+---------+---------+-----------+

用户可以执行以下任务,

  1. 搜索(姓名或姓氏)无过滤器(国家和状态)
  2. 搜索(姓名或姓氏)+ 一个或两个过滤器(国家和状态)
  3. 没有搜索(姓名或姓氏),只有一个或两个过滤器(国家和状态)

我应该写什么查询来解决这个问题?

编辑: 由于 Rob 拒绝做我的作业????,让我解释一下我做了什么!这不合乎道德,但可以奏效。

如果用户使用姓名或姓氏作为关键字在表格中进行搜索,我会使用 OR 查询获得这些结果。然后在 for 循环中通过选定的过滤器数组(如果有)运行该结果,并通过删除重复条目来显示最终结果。 如果没有执行搜索并且只应用了一组过滤器,那么我会带来整个表并如上所述运行 for 循环。 如果只执行搜索,那么我会使用上面所说的 OR 查询来删除结果。

【问题讨论】:

  • 否;我不会做你的功课:P
  • 大声笑,我不是要你做我的功课!
  • 我累了,失败了...我设法找到了解决方法,但还不够好。我想要一个 sql 查询..
  • @Rob Brander,检查编辑部分。

标签: javascript database sqlite cordova cross-platform


【解决方案1】:

您以错误的方式处理此问题,sqlite 中没有过滤器或搜索,您有 WHERE 子句和一些逻辑运算符,您可以将它们组合起来做您想做的事。以下是 2 的示例:

SELECT * FROM [tableName] WHERE (Name = "something" OR Surname = "somethingElse") AND (Country = "someContry" OR Status = "someStatus");

你只需要弄清楚逻辑,重要的是用括号分隔每个部分。

【讨论】:

  • 我试过这种方法。但我的问题是用户可以在同一列中选择多个过滤器。像 Country='U.S.A.", "U.K."。我不知道如何为这种情况编写查询。
  • @aB9 只需添加更多OR 条件。例如:((Country = "U.S.A" OR Country = "U.K" OR Country = "someContry") OR Status = "someStatus")。您还可以使用IN 条件。例如:Country IN ("U.S.A", "U.K", "someContry")
  • 哦,所以我需要运行一个 for 循环来根据使用的过滤器数量形成查询,对吧?
  • @aB9 是的,这应该可以,但是使用字符串连接创建 SQL 语句是不安全的。您应该清理用户输入。通常这是通过使用准备好的语句来完成的(取决于编程语言)。
  • 抱歉回复晚了!我尝试使用 OR 条件,现在它正在工作。 :)
猜你喜欢
  • 1970-01-01
  • 2017-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-11
相关资源
最近更新 更多