0

長い投稿で申し訳ありません...ユーザーが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_fetch_array):

+------------------+------------------+-------------------+---------------+---------------+---------------+----------------+----------------+------------+---------------+
| student_socialnr | student_lastname | student_firstname | customer_name | cpl_startdate | cpl_enddate   | cpl_coursename | cpl_pricevalue | total_days | total_invoice |
+------------------+------------------+-------------------+---------------+---------------+---------------+----------------+----------------+------------+---------------+
| 000000-0000      | Doe              | John              | A name        | 2012-06-01    | 2012-06-30    | A coursename   | 620            | 40         | 24800         |
+------------------+------------------+-------------------+---------------+---------------+---------------+----------------+----------------+------------+---------------+
| 000000-0000      | Clerksson        | Lisa              | A name        | 2012-01-05    | 2012-07-30    | A coursename   | 950            | 10         | 9500          |
+------------------+------------------+-------------------+---------------+---------------+---------------+----------------+----------------+------------+---------------+
| 000000-0000      | Derpson          | Derp              | A name        | 2012-04-01    | 2012-04-05    | A coursename   | 620            | 40         | 24800         |
+------------------+------------------+-------------------+---------------+---------------+---------------+----------------+----------------+------------+---------------+

今、私は次のことを行う関数を探しています:と

の間の日数の値を作成します。この値がより小さい場合、列の結果の値は計算を行います:列* [新しい値の結果] そしてそれをすべての行に出力します (ただし、データベースからの値よりも小さい場合のみ...)おそらく-queryで実行できますか? 私は本当にいくつかの助けを感謝します。これは、PHP と MySQL を使用する初めての Web サイトです。ありがとう。$invoice_startdate$invoice_enddate

total_days

price_value

MySQL



4

2 に答える 2

0

MySQL IF() と TO_DAYS() 関数の組み合わせを使用していると思います。だから、このようなもの:

SELECT IF( TO_DAYS(DATE_DIFF('$invoice_enddate', '$invoice_startdate')) < total_days, price_value * ... ) as total_invoice
于 2012-06-16T16:58:03.303 に答える
0

クエリに次のコードを追加して、これを自分で解決しました。

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
于 2012-06-16T19:07:45.363 に答える