@estry

Как построить запрос к базе данных?

Есть база данных вида:
n8wBL6e.png
Нужно построить запросы:

1) Получить model где дата меньше указанной (например 17.08.2020 12:00:00) и statuse = free ИЛИ дата сегодняшняя и countRent < 3. При этом сразу нужно поставить status = busy
Пробовал вот так: SELECT model FROM markGarage WHERE dateUsing < '20.08.2020 00:00:00' AND countRent = 3 AND statuse = 'free';
Не получилось :(

2) Добавить данные в таблицу со следующими условиями:
Если даты в dateUsing нет, то ставим текущую. Статус free. Причем, если текущие данные в поле model уже есть в таблице, то обновить строку увеличив значение в столбце countRent на 1.
Этот запрос даже не представляю как построить.

3) Получить model из базы указывая сколько дней ему должно быть, ориентируемся на столбец dateUsing.
  • Вопрос задан
  • 103 просмотра
Решения вопроса 1
@remzalp
Программер чего попало на чем попало
по первому:
и countRent < 3

а пишете в запросе "countRent = 3"... Попробуйте добавлять по одному дополнительному условию в where, пока не начнет фильтровать только нужное. Если совсем ничего не вернул - возвращайтесь на шаг и смотрите где проблема.

Текущую дату можно подставлять с функцией NOW(), а можно вставлять текстом из языка программирования (вы же в программе это делаете на самом деле, скрипте или там сценарии командной строки?).

Дальше - просто название модели получить бесполезно. Надо получать первичный ключ таблицы (id), его использовать в следующем UPDATE запросе. Если ключа нет, то Вам повезло - в будущем будет весело и интересно с дублирующимися данными.

Дальше - вы ВСЕ найденные модели хотите пометить как busy? Может дописать в конце LIMIT 1?

Итого первая задача выполнить два запроса:
1. получение достаточного количества столбцов, чтобы однозначно идентифицировать найденную строку (id + model, model + address или по вкусу). Из результатов запроса выводим модель, уникальный признак строки сохраняем между запросами
2. в UPDATE запросе подставляем уникальный признак строки в выражение WHERE

второй:
https://dev.mysql.com/doc/refman/8.0/en/insert-on-...

третий:
https://dev.mysql.com/doc/refman/8.0/en/date-and-t...

если совсем плохо с английским - mysql.ru с древним мануалом, но на русском.

//Для удобства отвечающих хорошо бы прикладывать минимальный дамп, который можно вставить в БД и покрутить запросы, заодно будет видно сразу все ошибки по созданию структуры таблицы.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы