【问题标题】:sql statement with not null in as3as3中不为null的sql语句
【发布时间】:2015-02-06 18:18:33
【问题描述】:

我试图在 adobe air for desktop 中将非空值传递给 as3 中的 sqlite 参数, 这是代码示例:

stat.text = "SELECT * FROM people, WHERE gender = @gender AND year = @year AND month = @month";
stat.parameters["@gender"] = genderBox.value;
stat.parameters["@year"] = year.text;
stat.parameters["@month1"] = month.text;

其中 genderBox 是一个组合框,有两个值,当然是男性和女性,其他只是文本框。我想让genderBox有3个值,第三个是男性和女性,所以当用户同时选择语句时选择男性和女性,我希望它传递类似非空值的内容并从该列中选择所有内容,但选择其他列月份和年份

【问题讨论】:

  • 所以您想在没有WHERE gender = @gender 的情况下运行查询?你为什么不这样做呢?
  • @CL。好吧,我不能删除它,因为有时我希望用户只选择一种性别,而不是同时选择所有记录

标签: sqlite actionscript-3 air


【解决方案1】:

为什么不分两步创建语句?

stat.text = "SELECT * FROM people WHERE year = @year AND month = @month";
if (genderBox.value) {
   stat.text += " AND gender=@gender";
   stat.parameters["@gender"] = genderBox.value;
}

我不知道 stat.text 是否可以这样附加,但我认为这个想法很清楚。

如果您仍想保持一体,请将相等更改为不相等,如下所示:

stat.text = "SELECT * FROM people WHERE gender != @gender AND year = @year AND month = @month";

使用参数@gender 的逻辑也会反过来。如果您的性别框返回“男性”,则查询将搜索所有女性。如果它返回“女性”,它将搜索男性。要搜索全部,只需传递一个不存在的值。所以这将需要改变性别框逻辑,它会变得混乱。所以实际上这不是一个好方法。

更新

如果您可以使组合框返回一个逗号分隔的列表,例如“男性,女性”作为第三个值,您可以使用以下查询:

SELECT * FROM people WHERE gender in(@gender)... etc

【讨论】:

  • 谢谢,我认为第一个选项是最好的,当有更多的人喜欢他们的工作或其他任何东西但还没有尝试过时,它甚至似乎在其他值下也能工作,所以我会尝试任何给你我的结果。
    第二个解决方案很好,如果第一个不起作用,也许我会尝试,但关于第三个我不能完全理解它
  • 第三种解决方案是标准 SQL 语法:“where gender in(1,2,3...)”表示它将搜索与列表中任何值匹配的所有内容。所以你的组合框应该返回“男”、“女”或“男、女”。
猜你喜欢
  • 2013-07-31
  • 2020-01-18
  • 2012-04-30
  • 2021-07-13
  • 2023-03-16
  • 2019-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多