需要为多个值执行数据库查询。所以有类似的东西:
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语句?
答案 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哈希值,当然更为简单。