【问题标题】:Get rows from database for multiple search values从数据库中获取多个搜索值的行
【发布时间】:2014-06-19 23:29:47
【问题描述】:

需要对多个值执行数据库查询。所以有类似的东西:

my(@ids) = get_ids_from_the_webform();

并且需要获取id@ids任何 个值的所有行。

必须处理多个查询,例如:

my @result; 
for my $id (@ids) {
    my $sth = prepare(".....");
    $sth->execute($id);
    my $rows = $sth->rows();
    @result = remove_duplicates(\@result, $rows);
}

或者这里有更简单的方法吗?

是否存在任何实现了一些简单的“基于逻辑的查询”以便于搜索的 perl 模块? (比如上面的“get rows where their ID is val1 OR val2 OR val3”之类的,还是需要自己手动构造SQL语句?

【问题讨论】:

    标签: perl dbi


    【解决方案1】:

    您肯定不想顺序查询数据库,而是想制作一个包含所有 WHERE 子句的 SQL。

    也许有人会建议更“高级”的解决方案,但首先您应该检查SQL::Abstract 模块,它可以为您生成一些复杂的查询。

    来自文档:

    my %where = (
       requestor => 'inna',
       worker => ['nwiger', 'rcwe', 'sfz'],
       status => { '!=', 'completed' }
    );
    
    my($stmt, @bind) = $sql->select('tickets', '*', \%where);
    

    上面会给你这样的东西:

    $stmt = "SELECT * FROM tickets WHERE
                ( requestor = ? ) AND ( status != ? )
                AND ( worker = ? OR worker = ? OR worker = ? )";
    @bind = ('inna', 'completed', 'nwiger', 'rcwe', 'sfz');
    

    因此,您不需要手动制作SQL,而是需要制作一个带有查询的 perl 哈希,这当然更容易。

    【讨论】:

      猜你喜欢
      • 2021-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多