Как правильно сделать запрос - MySQL
Формулировка задачи:
Привет всем. Помогите с запросом, что-то не пойму как сделать.
Есть таблица mytable с полями:
В поле "payed_status" хранится статус оплаты. Нужно в запросе типа:
получить все данные. Надо так, если "payed_status = 1", то вместо числа, которое в поле "summa_for_payed" всегда получать "0".
Если в запросе добавлю "and payed_status not like '1'", то получится, что вывода этой строки вообще не будет получено, но надо получить всё, только с уже изменённым полем "summa_for_payed" в зависимости от состояния "payed_status"
| driver_id | INT(11) | DATE | DATE | driver_name | VARCHAR(100) | percent | INT(11) | sum_recieved_from_client | DECIMAL(9,2) | sum_tariff_for_driver | DECIMAL(9,2) | summa_for_payed | DECIMAL(9,2) | payed_status | tinyint(1) | percent_company | INT(11)
SELECT * FROM mytable WHERE DATE(`date`) BETWEEN '$start_date' AND '$end_date'";
Добавлю, так же надо, чтобы во время запроса с командой sum(summa_for_payed) за определённую дату, получать сумму, имея ввиду значение поля "payed_status", а точнее чтобы где "payed_status = 1", то и в сумме поля "summa_for_payed" считались как "0" если "payed_status = 1"
Решение задачи: «Как правильно сделать запрос»
textual
Листинг программы
SELECT SUM(IF(`payed_status`=1, 0, `summa_for_payed`)) FROM mytable
Объяснение кода листинга программы
В данном коде происходит следующее:
payed_status- это название переменной, которая содержит значения, определяющие статус оплаты (например, 1 - оплачено, 0 - не оплачено).summa_for_payed- это название переменной, которая содержит сумму, которую необходимо оплатить.IF- это функция, которая возвращает одно значение, если условие верно, и другое значение, если условие ложно.SUM- это функция, которая суммирует все значения в выбранном столбце.IF(payed_status=1, 0,summa_for_payed)) - это выражение, которое возвращает 0, еслиpayed_statusравно 1 (оплачено), и возвращаетsumma_for_payed(сумму к оплате), еслиpayed_status` не равно 1.FROM mytable- это указание, из какой таблицы нужно выбрать данные. Таким образом, данный запрос выбирает сумму, которую необходимо оплатить, и возвращает ее. Если все значения в столбцеpayed_statusравны 1, то возвращается 0.