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

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

22.12.2019, 12:31. Показов 13312. Ответов 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
3900 / 3238 / 1353
Регистрация: 01.08.2012
Сообщений: 10,914
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
3900 / 3238 / 1353
Регистрация: 01.08.2012
Сообщений: 10,914
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
3900 / 3238 / 1353
Регистрация: 01.08.2012
Сообщений: 10,914
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
1315 / 1007 / 232
Регистрация: 01.10.2018
Сообщений: 3,910
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
1315 / 1007 / 232
Регистрация: 01.10.2018
Сообщений: 3,910
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
Ответ Создать тему
Новые блоги и статьи
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru