Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果php值小于结果,则使用MySQL查询对结果求和_Php_Mysql_Sum - Fatal编程技术网

如果php值小于结果,则使用MySQL查询对结果求和

如果php值小于结果,则使用MySQL查询对结果求和,php,mysql,sum,Php,Mysql,Sum,很抱歉提前发了一个很长的帖子 我有一个表单,其中用户输入一个startdate和一个enddate,结果将被发送到一个PHP文件,该文件将生成如下结果变量: PHP if(isset($_POST['user_selected_dates'])) { $invoice_startdate = $_POST['start_date']; $invoice_enddate = $_POST['end_date']; } 还有一个讨厌的MySQL查询 SELECT s.stud

很抱歉提前发了一个很长的帖子

我有一个表单,其中用户输入一个startdate和一个enddate,结果将被发送到一个PHP文件,该文件将生成如下结果变量:
PHP

if(isset($_POST['user_selected_dates'])) {
    $invoice_startdate = $_POST['start_date'];
    $invoice_enddate = $_POST['end_date'];
}
还有一个讨厌的MySQL查询

SELECT

  s.student_socialnr, s.student_lastname, s.student_firstname,
  cs.city_name,
  c.customer_name,
  scp.cpl_startdate, scp.cpl_enddate, scp.cpl_coursename, scp.cpl_pricevalue,
  SUM(scpe.scpe_days) AS total_days, scp.cpl_pricevalue * SUM(scpe.scpe_days) AS      total_invoice

 FROM studentcourseplan scp
   INNER JOIN students s ON s.student_id = scp.student_id
   INNER JOIN studentcourseplanelements scpe ON scpe.scpe_cpl_id = scp.cpl_id
   INNER JOIN cityselections cs ON cs.city_id = s.student_city_id
   INNER JOIN customers c ON c.customer_id = s.student_customer_id
 WHERE scp.cpl_startdate BETWEEN '$invoice_startdate' AND '$invoice_enddate'

 GROUP BY scp.cpl_id ORDER BY s.student_lastname ASC
这将在表中输出类似的内容(使用PHP
mysql\u fetch\u数组
):

现在我正在寻找一个可以执行以下操作的函数:


$invoice\u startdate
$invoice\u enddate
之间的天数创建一个值

如果此值较小则列
总天数中的结果值
进行计算:


价格值
*[新值的结果]并将其输出到每一行(但仅当其小于数据库中的值时…)

也许可以在
MySQL
-查询中完成

我非常感谢您的帮助。这是我第一个使用PHP和MySQL的网站,请耐心等待

谢谢。

我相信您正在考虑使用MySQL IF()和TO_DAYS()函数的组合。比如说:

SELECT IF( TO_DAYS(DATE_DIFF('$invoice_enddate', '$invoice_startdate')) < total_days, price_value * ... ) as total_invoice
选择是否(到天(日期差异(“$invoice\u enddate”,“$invoice\u startdate”)
我通过在查询中添加以下代码解决了这个问题:

CASE WHEN SUM(scpe.scpe_days) > DATEDIFF('$invoice_enddate', '$invoice_startdate') THEN
 (scp.cpl_pricevalue * DATEDIFF('$invoice_enddate', '$invoice_startdate')) ELSE SUM(scpe.scpe_days) * scp.cpl_pricevalue
END AS to_invoice

你能再解释一下吗?我认为它的方向是正确的,但我没有成功地将其放入我的查询中。我不确定在每种情况下,您希望进行什么样的精确计算,但它将是:选择IF(TO_DAYS(DATE_DIFF(“$invoice_enddate”,“$invoice_startdate”)total_DAYS))作为总发票。。。所以它可能是这样的:嗯,对不起,我按enter键太早了——对StackOverflow来说还是新的。:)无论如何,它应该这样说:我不确定在每种情况下你想要做什么样的精确计算,但它将是:选择如果(TO_DAYS(DATE_DIFF(“$invoice_enddate”,“$invoice_startdate”)total_DAYS在这里))作为total_invoice。。。不过,我不太清楚在每种情况下,您想要进行什么样的计算——您能给出这两种情况下的SQL示例吗?
CASE WHEN SUM(scpe.scpe_days) > DATEDIFF('$invoice_enddate', '$invoice_startdate') THEN
 (scp.cpl_pricevalue * DATEDIFF('$invoice_enddate', '$invoice_startdate')) ELSE SUM(scpe.scpe_days) * scp.cpl_pricevalue
END AS to_invoice