Как правильно сделать запрос - MySQL

Узнай цену своей работы

Формулировка задачи:

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

Решение задачи: «Как правильно сделать запрос»

textual
Листинг программы
  1. SELECT SUM(IF(`payed_status`=1, 0, `summa_for_payed`)) FROM mytable

Объяснение кода листинга программы

В данном коде происходит следующее:

  1. payed_status - это название переменной, которая содержит значения, определяющие статус оплаты (например, 1 - оплачено, 0 - не оплачено).
  2. summa_for_payed - это название переменной, которая содержит сумму, которую необходимо оплатить.
  3. IF - это функция, которая возвращает одно значение, если условие верно, и другое значение, если условие ложно.
  4. SUM - это функция, которая суммирует все значения в выбранном столбце.
  5. IF(payed_status=1, 0,summa_for_payed)) - это выражение, которое возвращает 0, еслиpayed_statusравно 1 (оплачено), и возвращаетsumma_for_payed(сумму к оплате), еслиpayed_status` не равно 1.
  6. FROM mytable - это указание, из какой таблицы нужно выбрать данные. Таким образом, данный запрос выбирает сумму, которую необходимо оплатить, и возвращает ее. Если все значения в столбце payed_status равны 1, то возвращается 0.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.846 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут