Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/64: Рейтинг темы: голосов - 64, средняя оценка - 4.94
 Аватар для Directorosea
2 / 2 / 0
Регистрация: 19.12.2019
Сообщений: 39

Обновить запись в MySQL, а если ее нет - добавить

22.12.2019, 12:31. Показов 13166. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! С наступающим новым годом! Парни подскажите пожалуйста - вот такая таблица MYTABLE

id ----------- dt ---------- tm --------ip --------------cmd
100200___12.12.19___ 22:41 ___192.168.0.1___N/A

PHP
1
2
$sql = "UPDATE MYTABLE SET dt='$dt',tm='$tm',ip='$ip' WHERE id='100400'";
mysqli_query($conn, $sql);
Код прекрасно работает - обновляет запись в строке, где id = 100400 , но только если оно уже есть.

Вопрос - как сделать в данном конкретном случае так, чтобы строка не только обновлялась с такимм id, но и добавлялась новая, если такого id нету. Понимаю, что можно сделать через select там типо поиск и потом if и insert into , но чувствую не могли создатели mysql не предусмотреть такой возможности Сильно не пинайте если что не так написал )
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.12.2019, 12:31
Ответы с готовыми решениями:

Запрос: если записи нет - добавить, если есть - обновить
Здравствуйте. Помогите составить запрос, который будет добавлять запись в таблицу, если ее там нет и обновлять несколько полей, если есть.

Обновить если запись есть; Создать если записи нет
Ребят подскажите как оптимизировать программу, ибо занимает очень много времени на обработку.Программа делает следующее - ищет на сайте...

триггеры на проверку если запись есть то пропустить если нет то добавить...
есть триггер но он работает только при добавлении одной записи.... мне нужно что бы он просматривал все....заранее благодарен)))) Alter ...

10
 Аватар для Directorosea
2 / 2 / 0
Регистрация: 19.12.2019
Сообщений: 39
23.12.2019, 13:37  [ТС]
Может тогда подскажете, как сделать через поиск?
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
24.12.2019, 23:52
Directorosea, пример из гугла:

SQL
1
INSERT INTO `tbl` SET `name`= 'Товар 11', `uc`='000009' ON DUPLICATE KEY UPDATE `name`= 'Товар 11'
0
 Аватар для Directorosea
2 / 2 / 0
Регистрация: 19.12.2019
Сообщений: 39
25.12.2019, 13:28  [ТС]
Jodah, Это да.. Это из гугла. Это я уже выучил наизусть. Не работает это.
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
25.12.2019, 13:56
Цитата Сообщение от Directorosea Посмотреть сообщение
Не работает это.
Распишите подробней.
0
 Аватар для Directorosea
2 / 2 / 0
Регистрация: 19.12.2019
Сообщений: 39
25.12.2019, 15:46  [ТС]
Jodah, Привет! Ну а что расписывать... если только предметно:

MYTABLE

id ----------- dt ---------- tm --------ip --------------cmd
100200___12.12.19___ 22:41 ___192.168.0.1___N/A

Все переменные получаю из $_POST

PHP
1
$sql = "INSERT INTO MYTABLE SET ip='$ip', cmd='$cmd' ON DUPLICATE KEY UPDATE id=100200"
Ни старая строка где 100200 не обновляется. Удалить ее - тож новая не появиться.

Остальное типо INSERT INTO и UPDATE все освоил и разобрался - работает. А вот on duplicate key update не хочет... а так нужно

Добавлено через 53 секунды
UPDATE..........WHERE тоже работает..

Добавлено через 15 минут
Пробовал поиграться с кавычками по всякому ... думал может синтаксис что.. максимум что добился - появляются новые строки, но никак не заменяются старые
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
25.12.2019, 17:12
Лучший ответ Сообщение было отмечено Directorosea как решение

Решение

Цитата Сообщение от Directorosea Посмотреть сообщение
ON DUPLICATE KEY UPDATE id=100200
Зачем id-то обновлять? Надо указать ещё раз ip и cmd.
1
 Аватар для Directorosea
2 / 2 / 0
Регистрация: 19.12.2019
Сообщений: 39
25.12.2019, 20:03  [ТС]
ДА? а я вроде как понял мануалы, что там указывается то значение, по которому надо найти строку и в ней замену )

Добавлено через 4 минуты
Попробовал... нет. Все я правильно делал. Просто не работает.

Добавлено через 5 минут
Вообще запутался:

Повторюсь : MYTABLE

id ----------- dt ---------- tm --------ip --------------cmd
100200___12.12.19___ 22:41 ___192.168.0.1___N/A
218392___12.12.19___12:33____107.212.32. 12.__Help


Входные данные:

$id
$dt
$tm
$ip
$cmd

Нужно:

Найти строку где есть указанный во вход. данных id и обновить в этой строке значения dt tm ip cmd
Если нет строки с таким id, то ее соответственно нужно создать.

Я окончательно запутался, Можете скинуть конкретный применительно к этой ситуации запрос? каков он?

Добавлено через 17 секунд
Jodah,

Добавлено через 12 минут
Уфф.. все заработало... я неправильно представлял принцип работы этой команды... честно говоря и сейчас не очень мне их задумка понравилась.... должно быть другое решение. Вообщем этому полю id еще нужно было поставить опцию что оно первичное.
0
1308 / 1000 / 232
Регистрация: 01.10.2018
Сообщений: 3,894
26.12.2019, 12:00
Цитата Сообщение от Directorosea Посмотреть сообщение
я неправильно представлял принцип работы этой команды... честно говоря и сейчас не очень мне их задумка понравилась.... должно быть другое решение. Вообщем этому полю id еще нужно было поставить опцию что оно первичное.
Это нормальное решение. А вот то что вы изначально не сделали `id` первичным ключом, это плохо. Уверен, что Jodah это подразумевал, как и любой другой на его месте. "ON DUPLICATE KEY UPDATE" еще работает на уникальных индексах, не являющихся первичными ключами. Это к слову. Вы пока в эту сторону даже не смотрите

Добавлено через 10 минут
Если идентификатор все же может меняться, посмотрите еще REPLACE. Там синтаксис компактнее (без дублирования отдельных полей и их значений).
0
 Аватар для Directorosea
2 / 2 / 0
Регистрация: 19.12.2019
Сообщений: 39
26.12.2019, 15:21  [ТС]
estic, Привет! Да действительно - экспериментально выяснилось, что все же UNIQUE нужно!

Добавлено через 54 секунды
Что поделать PHP и MySQL пятый день лишь изучаю. Хотя признаться думал что все куда сложнее.

Добавлено через 3 минуты
А вообще удобная эта штука mySQL на стороне серверной части. Все четко работает, нужно лишь раз правильно все настроить )
0
1308 / 1000 / 232
Регистрация: 01.10.2018
Сообщений: 3,894
27.12.2019, 12:21
Directorosea, PRIMARY KEY - по определению UNIQUE

Добавлено через 2 минуты
В документации по "ON DUPLICATE KEY UPDATE" об этом всем должно быть написано. К чему лишние разговоры?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.12.2019, 12:21
Помогаю со студенческими работами здесь

Как проверить запись на существование и добавить ее в базу данных если ее там нет или отредактировать если она там есть?
INSERT INTO AdvancedAccess VALUES('BlackBurn','test@yandex.ru','3884e9a59a96c3969c3b18d3cea442c4','1','2018-05-31 15:08:09') where ((SELECT...

Если строки с такой записью нет - создать, если есть - обновить
Приветствую всех местных жителей! В очередной раз у меня не получается правильно сформировать SQL запрос: SqlCommand command = new...

Если есть поле - обновить, если нет - создать
Всем привет! Возникла проблема: нужно создавать поле если нет с таким айди и обновлять его если в таблице такое айди есть. К примеру: у...

Если есть то обновить, иначе добавить
У меня есть таблица вида: NOMER COD. Нужно проверить, если телефон уже есть в базе, то обновить COD, если нет в базе, то создать запить...

Добавить если не существует иначе обновить redbeanphp
Есть таблица tags каждый пользователь выбирает теги и они забиваются в бд! Проблема такая нужно добавить если не существует тегов данного...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru