MySQL - Perl : How to use an array with IN within a select query?(在(@array)中)

标签 mysql arrays perl

这是我在这里解决的问题的补充: how to get array of zip codes within x miles in perl

好的,我有数组@zips。现在我正尝试在这样的查询中使用它:

SELECT `club_name`,`city` FROM `table` WHERE `public_gig` = 'y' AND `zip` IN (@zips)
#I also tried syntax "IN ("@zips"), IN @zips and IN ('@zips')"

但是,我无法让它工作。 (我正在使用占位符,如您在上面的链接中看到的那样。)

我能够让它工作:

$fzip=shift(@Zips);
$lzip=pop(@Zips);
SELECT `club_name`,`city` FROM `table` WHERE `public_gig` = 'y' AND `zip` BETWEEN $fzip AND $lzip

    ZIP | public_gig | start_time | fin_time | city       | club_name | and so on
  33416 | y          | 9pm        | 2am      | clearwater | beach bar | yada

但是,由于明显的原因和一些相似的准确性,这并不是我真正想要的。只是想看看我是否可以自己做点什么。

为什么我不能使用 IN 获取查询以处理数组中的 zips?没有任何返回,也没有错误。

实际上该查询中还有很多内容,但为了简短起见,我将其全部省略。

我试着自己弄明白了。很明显,我一天的学习能力接近顶峰。

感谢您的帮助。

最佳答案

如果您的任何值包含单引号,此处发布的所有示例都会搞砸,请不要使用它们。

相反(假设 $dbh 是您的 mysql 连接的数据库句柄):

my $zip_string = join q{,}, map $dbh->quote($_), @zips;

并插入那个

或者,为了一些不错的东西,但没有 DBIx::Perlish 一半古怪:SQL::Abstract .

my $sqla = SQL::Abstract->new;
my ($sql, @bind) = $sqla->select(
  'table', 
  ['club_name', 'city'],
  {
    public_gig => y',
    zip => { -in => \@zips },
  }
);

$dbh->prepare($sql);
$dbh->execute(@bind);
# fetchrow etc.

关于MySQL - Perl : How to use an array with IN within a select query?(在(@array)中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5148540/

相关文章:

javascript - 根据Typescript中的参数添加json对象值数组

javascript - 来自指定数组的元素对,其总和等于特定目标数

mysql - 找不到 DBI.pm,即使它在路径中

MySQL 总计行和列

mysql - 如何解决MySQL错误: #1064 in this case?

mysql - 检索满足一个条件但不满足另一个条件的记录

php - 如何检查 while($row = PHP 中的 mysql_fetch_array 的结果

arrays - 添加数字数组,就好像它们代表数字一样

regex - 用 perl 查找和替换双换行符?

php - 在 Linux 上以特权用户身份通过​​ PHP/Perl 脚本运行命令