首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在动态查询中模拟WHERE 1?

如何在动态查询中模拟WHERE 1?
EN

Stack Overflow用户
提问于 2017-08-03 02:47:35
回答 5查看 89关注 0票数 1

我像这样动态地进行查询:

代码语言:javascript
运行
复制
$query = "SELECT u.*
          FROM users u
          WHERE date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 1 $range))";

此外,$range还包含一个类似于以下内容的单词:

代码语言:javascript
运行
复制
switch ($_GET['range']){
   case "week":
      $range = "WEEK";
   case "month":
      $range = "MONTH";
   case "year":
      $range = "YEAR";
   case "ALL":
      $range = <I don't know what should I put here to get the expected result>;
}

正如我在上面所说的,我想要将一些东西设置为$range值,以使WHERE子句类似于WHERE 1。我怎么才能做到这一点呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-08-03 02:57:14

我认为Adam的建议是这样的:

代码语言:javascript
运行
复制
$where = '';

switch ($_GET['range']) {

    case "week":
       $where = "date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 1 WEEK))":
        break;

    case "month":
       $where = "date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 1 MONTH))":
        break;

    case "year":
       $where = "date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 1 YEAR))":
        break;

    default:
        $where = '';
}

$query = "SELECT u.* FROM users u WHERE $where";

假设使用其他标准进行报告?字符串连接变得杂乱无章。在部件之间添加'AND‘。完全取消WHERE关键字?其中表示SQL查询的OOP代码可能很有用。

票数 1
EN

Stack Overflow用户

发布于 2017-08-03 02:52:39

也许在where子句中使用case语句?

代码语言:javascript
运行
复制
 $query = "SELECT u.*
           FROM users u
           WHERE CASE {$range}
                 WHEN 'ALL' then TRUE
                 ELSE date_time > unix_timestamp(DATE_SUB(now()
                                  , INTERVAL 1 {$range}))
                 END";
票数 3
EN

Stack Overflow用户

发布于 2017-08-03 02:54:00

代码语言:javascript
运行
复制
switch ($_GET['range']){
  case "week":
  $range = "WEEK";
 case "month":
  $range = "MONTH";
 case "year":
  $range = "YEAR";
 case "ALL":
  $range = null;
}

$query = "SELECT u.*
      FROM users u
      WHERE 1=1 ";
if(!empty($range)) {
  $query .= " AND date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 1 $range))";
}

有条件地添加datetime where子句;WHERE 1=1将始终为真。因此,下一个条件的结果将影响最终结果

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45468750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档