【问题标题】:General concept of dealing with filter combinations [duplicate]处理过滤器组合的一般概念[重复]
【发布时间】:2020-01-05 13:46:49
【问题描述】:

我正在做一个使用过滤器来构建电影列表的项目。

一般的想法是,每个过滤器都可以单独应用。

如上图所示,您可以自行搜索(标题 | 导演 | 演员)。或者搜索运行时间少于 X 分钟的电影。或者搜索某一年的电影。

或执行 2 个或所有选项的组合。

目前该项目是用 PHP 编写的,但我会接受任何提示,因为我对处理组合的一般概念感兴趣。

到目前为止,这是我的方法:我为这 3 个过滤器的所有可能组合编写了代码。我确信这是所有可能的方法中最糟糕的,我希望你能给我一些见解。

if (!empty($suchstring) && empty($dauer) && empty($jahr)) {
    // do for suchstring
}
elseif(!empty($dauer) && empty($suchstring) && empty($jahr)) {
    // do for dauer
}
elseif(!empty($jahr) && empty($suchstring) && empty($dauer)) {
    // do for jahr
}
elseif (!empty($suchstring) && !empty($dauer) && empty($jahr)) {
    // do for dauer THEN do for suchstring
}
elseif (!empty($suchstring) && !empty($jahr) && empty($dauer)) {
    // do for jahr THEN do for suchstring
}
elseif(empty($suchstring) && !empty($dauer) && !empty($jahr)) {
    // do for dauer THEN do for jahr
}
elseif (!empty($suchstring) && !empty($dauer) && !empty($jahr)) {
    // do for dauer THEn do for jahr THEN do for suchstring
}

【问题讨论】:

  • 您如何与数据库交互? mysqli? PDO?还有什么?

标签: php combinatorics


【解决方案1】:

可能是这样的:

    $link = mysqli_connect(SERVER, USER, PASS, DB);

    $sql_str = "SELECT .... ";

   if (!empty($suchstring)) {
      $suchstring = mysqli_real_escape_string($link, $suchstring); //or mysql_real_escape_string
      $sql_str .= " AND SUCHSTRING ='".$suchstring."'";  //or LIKE '%".$suchstring."%'
   }
   if (!empty($dauer)) {
      $dauer = mysqli_real_escape_string($link, $dauer);
      $sql_str .= " AND DAUER ='".$dauer."'";
   }
   if (!empty($jahr)) {
      $jahr = mysqli_real_escape_string($link, $jahr);
      $sql_str .= " AND JAHR ='".$jahr."'";
   }

  //sql_query for $sql_str

【讨论】:

  • 第一个AND 可能会中断查询。没有人应该推荐已弃用/删除的mysql_ 函数。准备好的陈述是最合适的/现代的/专业的。您的问题也缺少简单的英文解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-04
  • 2021-12-09
  • 2011-01-15
相关资源
最近更新 更多