【问题标题】:Select Query by array values选择按数组值查询
【发布时间】:2014-06-20 06:13:11
【问题描述】:

我有一个 ids 数组,我必须从表中为每个数组值选择,我可以在for loop 中一个一个地得到它,

SELECT  point, privacy FROM `tableName` WHERE id='1403176452487620892'and status=1

但问题是数组大小是 100,我需要一个查询而不是 100。

【问题讨论】:

  • 这来自什么语言?爪哇?
  • @AlvinThompson 我正在使用 Scala
  • 是的,通过 JDBC 驱动循环和绑定值。
  • JVM 上的Scala,对吧?
  • 不是 那个 类似,但您在 JVM 上运行它,因此您使用的是 JDBC 驱动程序。这意味着您可以毫无问题地绑定值。

标签: mysql sql arrays


【解决方案1】:

为什么不能使用:

SELECT  point, privacy FROM `tableName` WHERE status=1 and id in(?,?,?...)

是的,它太长了,但是如果您需要一个查询...

【讨论】:

  • Use a for loop for that as well你在那篇文章中的评论,抱歉我没听懂
  • @GovindSinghNagarkoti:但现在你知道了吗?
  • @GovindSinghNagarkoti:对不起,你的意思是什么,“这意味着它不是使用IN我的情况的正确方法”?
  • 我是否必须使用您的查询
  • 是的。在 JDBC 中别无选择。
【解决方案2】:

你可以这样使用:

   $ids = join(',',$ids);  
   $sql = "SELECT * FROM tableName WHERE id IN ($ids)";

【讨论】:

  • ID 数组是否在数据库中? MySQL 不能做for 循环,可以吗?
  • $ids = join(',',$ids); 不熟悉此语法是否将其转换为逗号分隔字符串
  • 是的,它将它转换为逗号分隔的字符串。
  • @AlvinThompson 它不在数据库中
  • @GovindSinghNagarkoti:所以使用 for 循环以任何语言来构造具有所有这些值的巨大 in 语句,并绑定数组中的值。除非您使用的是 Oracle,否则在 in 语句中包含 100 个值没有问题。
【解决方案3】:

你可以这样试试

$array = array(1,2,3);
$str = implode(",", $array);
$sql = "SELECT  point, privacy FROM `tableName` WHERE id in ($str) and status=1";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-01
    • 2017-10-02
    • 2018-01-27
    • 1970-01-01
    • 1970-01-01
    • 2014-07-23
    • 2021-09-29
    • 2020-04-15
    相关资源
    最近更新 更多