gpt4 book ai didi

mysql - 从单独表中的键/值对中选择不同的值

转载 作者:行者123 更新时间:2023-11-29 08:32:45 24 4
gpt4 key购买 nike

我有 2 个数据库表

JOBS(JOB_ID, JOB_TIME, JOB_NAME,...), JOB_PARAMETERS(JOB_ID,NAME,VALUE)

其中 JOB_PARAMETERS 本质上是一个包含作业参数键值对的映射。每个作业可能有唯一的参数键/值对。

我希望以务实的方式构建一个查询,该查询将返回包含键/值组合的不同作业 ID。其中值实际上是值列表,比较运算符。例如:

JOB_PARAMETERS: NAME = 'OUTPUT_FILENAME', VALUE LIKE "ALEX%", "JAX%"
NAME = 'PRIORITY' , VALUE > 7

上面的示例将自动过滤掉所有没有 OUTPUT_FILENAME 和 PRIORITY 键的作业。返回满足这两个条件的所有作业。

我还需要能够支持分页和排序。

我计划将 Perl 与 DBIx::Class 一起使用,但我也可以使用纯 Perl/SQL 来实现。

我愿意更改数据库架构,但每个作业都可以有不同的键/值对,因此我不能只将它们设置为作业表中的列。

提前致谢。

最佳答案

使用 DBIx::Class 时,您可以使用 Schema::Loader 生成 DBIC 架构。

连接到数据库后,您将获得一个 $schema 对象,您可以使用它来过滤 ResultSet 以返回您想要的 Result 对象:

my $rs_job_parameters = $schema->resultset('Job_Parameters')->search({
-or => [
{
'name' => 'OUTPUT_FILENAME',
'value' => [{ like => 'ALEX%'}, { like => 'JAX%' }].
},
{
'name' => 'PRIORITY',
'value' => [{ '>' => 7}].
}
]},
{
columns => [qw( job_id )],
group_by => [qw( job_id )], # alternative you can use distinct => 1 to group_by all selected columns
having => \[ 'COUNT(*) = ?', [ 2 ] ],
}
);

my @job_ids = $rs_job_parameters->get_column('job_id')->all;

关于mysql - 从单独表中的键/值对中选择不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16107153/

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