我像这样动态地进行查询:
$query = "SELECT u.*
FROM users u
WHERE date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 1 $range))";此外,$range还包含一个类似于以下内容的单词:
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。我怎么才能做到这一点呢?
发布于 2017-08-03 02:57:14
我认为Adam的建议是这样的:
$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代码可能很有用。
发布于 2017-08-03 02:52:39
也许在where子句中使用case语句?
$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";发布于 2017-08-03 02:54:00
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将始终为真。因此,下一个条件的结果将影响最终结果
https://stackoverflow.com/questions/45468750
复制相似问题