gpt4 book ai didi

mysql - Perl Mysql - 如何根据一个 "main"匹配项搜索特定数据?

转载 作者:行者123 更新时间:2023-11-30 23:39:34 25 4
gpt4 key购买 nike

User Form Input - City
User Form Input - Venue
User Form Input - Cover
User Form Input - Time
User Form Input - Date
User Form Input - Number1
User Form Input - Number2

(如果有任何空白,它们会在进入时被隐藏为“*”。但可以是任何有效的。)

my $grabgig = $hookup->prepare(qq{SELECT `VenueNumber`,`Venue`,`CoverCharge`,`SetLength`,`City`,`Owner`,`Date`,`Time`,`Image1`,`Number`

FROM `gigs`
WHERE VenueNumber > ? AND `City` = ? AND `Venue` = ? AND `CoverCharge` = ?
AND Date = ? AND `Number` > ? AND `Number` < ?
AND `Time` LIKE ? LIMIT ?,?});

##########################################

$grabgig->execute('100',$city,$venue,$cover,'*',$number1,$number2,?,'0','6')
or die "Did not execute";

这是上面的一个基本示例。

我希望能够根据城市输入返回结果。

如果存在更多输入,则相应地缩小结果范围。

但如果字段为空 (*),则查询不返回任何内容。

然后我尝试了通配符等等,我尝试了 LIKE 和 NOT LIKE。

这个看似简单的搜索让我抓狂。

有人可以帮助这个新手吗?

最佳答案

好的,我不太确定你的意思,但是,我对你想要做的事情的最好理解是像你现在做的那样查询但是如果表单中没有填充特定字段,以避免添加where 子句的字段;而不是当前查询,而是执行 和 myField="*"

正确吗?

如果是这样,您需要分段构建查询和替换列表:

my $sql = qq{SELECT MY_FIELD_LIST_TOO_LAZY_TO_TYPE FROM `gigs` WHERE 2=2};
my @replacement_values = (); # These go into execute() instead of "?"s
if ($city ne "*") {
$sql .= qq[AND city = ?];
push @replacement_values, $city;
}
if ($number1 ne "*") {
$sql .= qq[AND number > ?];
push @replacement_values, $number1;
}

# ... more values processed the same way

my $grabgig = $hookup->prepare($sql);
$grabgig->execute(@replacement_values) or die "Did not execute";

如果你想更智能地做到这一点(即泛化),你将在散列中拥有表单字段;有一个配置哈希将表单字段名称映射到数据库列名称和运算符,而不是按上述方式执行:

my %fields = (
city => ["city" , "="]
,number1 => ["number", ">"]
,number2 => ["number", "<"]
);
my $sql = qq{SELECT MY_FIELD_LIST_TOO_LAZY_TO_TYPE FROM `gigs` WHERE 2=2};
my @replacement_values = (); # These go into execute() instead of "?"s
foreach my $field (keys %form_data) {
next unless exists $fields{$field};
if ($form_data{$field} ne "*") {
$sql .= qq[ AND $fields{$field}->[0] $fields{$field}->[1] ?];
push @replacement_values, $form_data{$field};
}
}
my $grabgig = $hookup->prepare($sql);
$grabgig->execute(@replacement_values) or die "Did not execute";

关于mysql - Perl Mysql - 如何根据一个 "main"匹配项搜索特定数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4628425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com