У меня есть таблица счета за коммунальные услуги следующим образом:Как использовать оператор case в запросе mysql в моем случае?
table: table_bill
-----------------------------------------------------------------------------
id | bill_type | month | year | lastdate | amount | latedate1 | lateamount1 | latedate2 | lateamount2|
------------------------------------------------------------------------------
1 | Electricity | Jan | 2015 | 2015-02-01 | 500 | 2015-03-01 | 550 | 2015-04-01 | 600
------------------------------------------------------------------------------
2 | Water | Jan | 2015 | 2015-03-01 | 200 | 2015-04-01 | 250 | 2015-05-01 | 300
-------------------------------------------------------------------------------
3 | Gas | Jan | 2015 | 2015-02-01 | 800 | 0000-00-00 | NULL | 0000-00-00 | NULL
--------------------------------------------------------------------------------
Таблицы Описание:
Электричество и банкнота Воды есть штраф за просрочку платежа, поэтому эти столбцы заполняются данными, с другой стороны, законопроект газа не имеет штрафа за просрочку платежа. Таким образом, данные счета за газ составляют 0000-00-00 для даты или Null для суммы.
Теперь, когда я хочу, чтобы просмотреть неоплаченный счет на 2015-03-01, то я хочу, неоплаченный счет в следующей таблице:
table: html table
--------------------------------------------------------------
Bill Type | Month | Year | Next Payment Date | Payable Amount
--------------------------------------------------------------
Electricity | Jan | 2015 | 2015-03-01 | 550
--------------------------------------------------------------
Water | Jan | 2015 | 2015-03-01 | 200
--------------------------------------------------------------
Gas | Jan | 2015 | 2015-02-01 | 800
--------------------------------------------------------------
Объяснение: В законопроекте Электричества есть штраф за просрочку платежа и я просмотр счет на 2015-03-01, поэтому следующая дата платежа будет равна 2015-03-01, а сумма к оплате - 550 с оплатой за просрочку. С другой стороны, счет за воду также штрафуется за просрочку платежа, но поскольку последний срок без просрочки платежа составляет 2015-03-01, значит, следующая дата платежа - 2015-03-01, а сумма - 200. Поскольку счет за газ не имеет опоздания плата, так что следующая дата платежа - 2015-02-01, хотя я просматриваю счет на 2015-03-01, а сумма платежа составляет 800.
Вопрос: Как сделать запрос SELECT для извлечения данных из таблицы базы данных для вывести вышеупомянутую неоплаченную таблицу счетов?
Я хочу использовать заявление CASE, но не очень хорошо известно о ЗАЯВЛЕНИИ СЛУЧАИ. Я попытался с помощью следующего запроса:
$today = gmdate('Y-m-d', time()+21600);
SELECT bill_type, month, year,
CASE bill_type WHEN Electricity AND $today<=lastdate THEN lastdate
WHEN Electricity AND $today<=lastdate1 THEN latedate1
WHEN Electricity AND $today<=lastdate2 THEN lastdate2
WHEN Electricity AND $today<=lastdate3 THEN lastdate3
WHEN Water AND $today<=lastdate1 THEN latedate1
WHEN Water AND $today<=lastdate2 THEN lastdate2
WHEN Water AND $today<=lastdate3 THEN lastdate3
ELSE lastdate END) as ldate,
CASE bill_type WHEN Electricity AND $today<=lastdate THEN amount
WHEN Electricity AND $today<=lastdate1 THEN lateamount1
WHEN Electricity AND $today<=lastdate2 THEN lateamount2
WHEN Electricity AND $today<=lastdate3 THEN lateamount3
WHEN Water AND $today<=lastdate1 THEN lateamount1
WHEN Water AND $today<=lastdate2 THEN lateamount2
WHEN Water AND $today<=lastdate3 THEN lateamount3
ELSE amount END) as amount FROM table_bill
Но приведенный выше запрос не работает, а также он является слишком большим, если будет больше bill_type как санитария, интернет, хостинговые и т.д. Для каждого bill_type, я должен сделать два оператора CASE и в каждом заявлении CASE я должен использовать WHEN ..... THEN много раз.
Как сделать запрос работоспособным и простым, насколько это возможно?
Нет нормализации не требуется. Я выяснил запрос. Это будет: SELECT bill_type, month, year, CASE WHEN bill_type = 'Electricity' или bill_type = 'Water' AND lastdate> = '$ today' THEN lastdate WHEN bill_type = 'Electricity' или bill_type = 'Water' AND lastdate1> = '$ today' THEN lastdate1 WHEN bill_type = 'Electricity' или bill_type = 'Water' AND lastdate2> = '$ today' THEN lastdate2 ELSE lastdate END as ldate –