加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – 构建添加WHERE和使用占位符的SQL的更优雅方式

发布时间:2020-12-15 21:47:58 所属栏目:大数据 来源:网络整理
导读:构造具有各种WHERE条件的sql的最佳方法是什么? 我的解决方案看起来很难看 my ($where,@values);if ($phone_number){ $where = 'AND pnone_number=?'; @values = ($from,$till,$phone_number);}else { $where = ''; @values = ($from,$till);}my $sql = 'SEL
构造具有各种WHERE条件的sql的最佳方法是什么?
我的解决方案看起来很难看
my ($where,@values);
if ($phone_number)
{
    $where = 'AND pnone_number=?';
    @values = ($from,$till,$phone_number);
}
else 
{
    $where = '';
    @values = ($from,$till);
}
my $sql = 'SELECT * FROM calls WHERE time between ? AND ? '.$where.' ORDER BY time';
my $res = $dbh->selectall_arrayref($sql,undef,@values) or warn 'error';

解决方法

怎么样:
my $where = '';
my @values = ( $from,$till );

if ( $phone_number ) { 
    $where = 'AND phone_number=?';
    push @values,$phone_number;
}

这消除了对你的else子句的需要.

你也可以使用像SQL::Abstract这样的东西.

use SQL::Abstract;

...

my ( $sql,@values ) = SQL::Abstract->new->select(
    'calls',# table
    '*',# columns
    { time => { '<=' => $till,'>' => $from },# where clause
      $phone_number ? ( phone_number => $phone_number ) : ( ),},'time'                                                      # order clause
);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读