从数据库中获取多个搜索值的行

时间:2014-05-03 09:08:41

标签: perl dbi

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

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模块都存在已经实现了一些简单的基于逻辑的查询"方便搜索? (例如,如上所述"获取其ID为val1或val2或val3"和类似的行,或者需要手动构建SQL语句?

1 个答案:

答案 0 :(得分:1)

您确实不希望随后查询数据库,但希望在所有WHERE clausule中创建一个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哈希值,当然更为简单。