繁体   English   中英

按周,按月分组,取决于php变量。 如果条件在组中

[英]Group by week,month in mysql depending on php variable. If condition in group by

我有一张桌子, prescription ,哪个领域

  • prescription_id
  • 描述
  • patient_id
  • pres_date
  • 标题

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

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

代码将是这样的

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)";
}

您甚至不需要使用条件逻辑。 做这样的事情:

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

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

最简单的方法是在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)

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

不需要多个条件检查,在变量中获取所选选项并在sql查询中使用它,

if(isset($_POST['selected_option']))
    $grp_option=$_POST['selected_option'];  
$sql = "SELECT .... GROUP BY".$grp_option."(pres_date)";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM