0

我有一个表prescription,其中的字段

  • 处方ID
  • 描述
  • 患者编号
  • pres_date
  • 标题

我知道如何按月、周或天分组。我的问题是,我希望这是动态的。我在 UI 中有一个界面,用户可以在其中选择类别、月、日或周。我将其存储在变量 $category 中。有没有办法在 group by 中使用 if 条件来查看用户选择了哪个类别,并以该格式返回 sql 查询。

例如,如果用户选择月份,在我的 sql 查询中,我希望它返回,按月分组(pres_date),如果用户选择天,我希望 sql 按天返回分组(pres_date)。

4

5 回答 5

1

代码将是这样的

if($_POST['select'] == 'month')
{
    $sql = "select * from table group by month(pres_date)";
}
else if($_POST['select'] == 'day')
{
    $sql = "select * from table group by day(pres_date)";
}
else
{
    $sql = "select * from table group by week(pres_date)";
}
于 2012-12-09T06:02:11.207 回答
1

您甚至不需要使用条件逻辑。只需执行以下操作:

$sql = "SELECT * FROM prescription GROUP BY " . $category . "(pres_date)";

这样,您的查询就可以使用一行来构建。当然,请确保在运行查询之前验证 $category 的值。

于 2012-12-09T06:04:30.547 回答
0

最简单的方法是在 PHP 中,使用 if 或 switch 语句:

$sql = "SELECT ... FROM ... ";
switch($category) {
    case 'month':
        $sql .= "GROUP BY month(pres_date)";
        break;
    case 'day':
        $sql .= "GROUP BY day(pres_date)";
        break;
    //... etc ...
    default:
        //bad category value; do some error handling
}

// now do $mysqli->query($sql) or $PDO->query($sql)
于 2012-12-09T06:01:05.983 回答
0

听起来你已经让自己走上了正确的道路。您应该能够构建查询的基本形式,然后根据他们选择的值对其进行修改。group by month(pres_date)如果他们选择月份等,请尝试以您添加的方式做一些事情。

于 2012-12-09T06:01:17.650 回答
0

不需要多重条件检查,在变量中获取选中的选项,在sql查询中使用,

if(isset($_POST['selected_option']))
    $grp_option=$_POST['selected_option'];  
$sql = "SELECT .... GROUP BY".$grp_option."(pres_date)";
于 2012-12-09T06:05:47.103 回答