首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
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

Stack Overflow用户

发布于 2017-08-03 04:45:37

我将定义一个具有有效范围的数组,并首先验证用户输入。然后动态构建查询。

代码语言:javascript
运行
复制
$validRanges = [
    'year'  => 'YEAR',
    'month' => 'MONTH',
    'week'  => 'WEEK',
    'ALL'   => null
];

if (isset($_GET['range']) && !isset($validRanges[$_GET['range']])) {
    $range = $validRanges[$_GET['range']]);
} else {
    // it's up to you, what to do in this case
    throw new Exception('Range is not valid or missing');
}

if ($range === null) {
    $rangeCondition = '1=1';
} else {
    $rangeCondition = "date_time > unix_timestamp(NOW() - INTERVAL 1 $range)";
}

$query = "SELECT u.*
          FROM users u
          WHERE $rangeCondition";
票数 0
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45468750

复制
相关文章

相似问题

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