簡體   English   中英

如何在同一列上過濾具有2個條件的Perl DBIx記錄集?

[英]How can I filter a Perl DBIx recordset with 2 conditions on the same column?

我在DBIx :: Class中弄濕了 - 到目前為止愛它了。

我遇到的一個問題是我想查詢記錄,過濾掉不在特定日期范圍內的記錄。

我花了一段時間才找到如何做<=匹配類型而不是相等匹配:

my $start_criteria = ">= $start_date";
my $end_criteria = "<= $end_date";
my $result   = $schema->resultset('MyTable')->search(
  {
    'status_date' => \$start_criteria,
    'status_date' => \$end_criteria,
  });

這個問題的一個明顯問題是,由於過濾器是哈希值,我會覆蓋“status_date”的值,並且只搜索status_date <= $ end_date的位置。 執行的SQL是:

SELECT me.* from MyTable me where status_date <= '9999-12-31'

我搜索過CPAN,Google和SO,但無法弄清楚如何將2個條件應用於同一列。 我能夠找到的所有文檔都顯示了如何在同一列上過濾超過1列而不是2個條件。

我確定我錯過了一些明顯的東西。 有人可以在這指出我嗎?

IIRC,您應該能夠傳遞多個搜索條件的數組引用(每個都在自己的hashref中。)例如:

my $result = $schema->resultset('MyTable')->search(
  [ { 'status_date' => \$start_criteria },
    { 'status_date' => \$end_criteria },
  ]
);

編輯:哎呀,nervermind。 這是一個OR,而不是AND。

看起來正確的做法是為單個status_date提供hashref:

my $result = $schema->resultset('MyTable')->search(
    { status_date => { '>='  => $start_date,  '<='  => $end_date } } 
);

這些東西記錄在SQL :: Abstract中 ,這是DBIC在引擎蓋下使用的。

在SQL和DBIx :: Class中有BETWEEN支持:

my $result = $schema->resultset('MyTable')
   ->search({status_date => {between => [$start_date,$end_date]}});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM