这是我在这里解决的问题的补充: 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/