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

Ссылка скопирована
1 ответ

Всем здравствуйте! Помогите пожалуйста разобраться, имеется таблица 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'

$query = SELECT * FROM city_meta WHERE city_id = 1 AND key = 'timezone'

Вывод запроса

stdClass Object (     [id] => 1     [city_id] => 1     [key] => timezone     [value] => Europe/Moscow )

stdClass Object ( [id] => 1 [city_id] => 1 [key] => timezone [value] => Europe/Moscow )

Условие при котором будет производится обновление текущей записи, или запись нового значения в случае его отсутсвия

if ($query->key == 'timezone'){     // update запрос к бд }else{    // insert запрос к бд }

if ($query->key == 'timezone'){ // update запрос к бд }else{ // insert запрос к бд }

Дополнительно:

Ответы:

запрос к бд получается уже некорректным

что в нем некорректного? Вы запросили данные, их в бд нет, вернулся пустой ответ. Так и должно быть.

И возможно ваши страдания решаются запросом типа insert ... on duplicate key update ...
https://dev.mysql.com/doc/refman/8.0/en/insert-on-...

Мне кажется проблема в логике. Нужно при добавлении города в базу добавлять его таймзону, при обновлении - обновлять!

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Антон С. Ответ

Для формирования запроса SQL в случае отсутствия значения в таблице базы данных можно воспользоваться оператором условия SQL - IFNULL или COALESCE.

Пример использования оператора IFNULL:

SELECT IFNULL(column_name, 'default_value') FROM table_name;

SELECT IFNULL(column_name, 'default_value') FROM table_name;

В данном примере, если значение в столбце column_name равно NULL, то будет возвращено значение 'default_value'.

Пример использования оператора COALESCE:

SELECT COALESCE(column_name, 'default_value') FROM table_name;

SELECT COALESCE(column_name, 'default_value') FROM table_name;

COALESCE работает аналогично IFNULL, но позволяет указать несколько аргументов для проверки на NULL и возвращает первое не NULL значение из списка.

Также можно использовать условие WHERE для фильтрации записей в случае отсутствия значения:

SELECT * FROM table_name WHERE column_name IS NULL;

SELECT * FROM table_name WHERE column_name IS NULL;

Этот запрос вернет все записи, у которых значение столбца column_name равно NULL.

Или можно использовать оператор NOT EXISTS для проверки отсутствия записей в другой таблице:

SELECT * FROM table_name1 WHERE NOT EXISTS (SELECT * FROM table_name2 WHERE condition);

SELECT * FROM table_name1 WHERE NOT EXISTS (SELECT * FROM table_name2 WHERE condition);

В данном случае, будет выбраны все записи из table_name1, которые не имеют соответствия в table_name2 по указанному условию.

Надеюсь, эти примеры помогут вам сформировать запрос SQL в случае отсутствия значения в таблице базы данных.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно