Ballly
@Ballly

Как сформировать запрос SQL в случае отсутствия значения в таблице базы данных?

Всем здравствуйте! Помогите пожалуйста разобраться, имеется таблица city_meta в которой содержаться данные по городам и содержит данные как ключ-значение, одним из таких значений является часовой пояс (timezone). При редактировании карточки населенного пункта, может быть, что значение timezone уже присутствует в таблице и необходимо, чтобы выполнялось условие обновления значения value, в случае отсутствия в таблице бд значения timezone выполнялось условие записи нового значения. Вопрос в том, что при текущем sql запросе, например при обращении к 'city_id => 1', в таблице city_meta значение timezone присутствует, формируется объект std класса, условие по обновлению значения будет выполняться, но например уже при обращении к 'city_id => 2' ключа timezone в таблице еще нет и надо выполнить условие по записи нового значения, но в данном случае запрос к бд получается уже некорректным, так как задается условие выборки еще не существующего значения.
Текущий запрос к базе данных
$query = SELECT * FROM city_meta WHERE city_id = 1 AND key = 'timezone'

Вывод запроса
stdClass Object
(
    [id] => 1
    [city_id] => 1
    [key] => timezone
    [value] => Europe/Moscow
)

Условие при котором будет производится обновление текущей записи, или запись нового значения в случае его отсутсвия
if ($query->key == 'timezone'){
    // update запрос к бд
}else{
   // insert запрос к бд
}
  • Вопрос задан
  • 97 просмотров
Пригласить эксперта
Ответы на вопрос 2
Stalker_RED
@Stalker_RED
запрос к бд получается уже некорректным
что в нем некорректного? Вы запросили данные, их в бд нет, вернулся пустой ответ. Так и должно быть.

И возможно ваши страдания решаются запросом типа insert ... on duplicate key update ...
https://dev.mysql.com/doc/refman/8.0/en/insert-on-...
Ответ написан
Комментировать
rozhnev
@rozhnev Куратор тега PHP
Fullstack programmer, DBA, медленно, дорого
Мне кажется проблема в логике. Нужно при добавлении города в базу добавлять его таймзону, при обновлении - обновлять!
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽