Форум программистов, компьютерный форум, киберфорум
MySQL
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
1 / 1 / 1
Регистрация: 10.04.2016
Сообщений: 95
1

Обновление записей в таблице

27.07.2017, 22:05. Показов 1095. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Помогите решить поставленную задачу.

Мне нужно сделать обновление таблицы: чтобы существующие записи обновились, не существующие добавились, а отсутствующие в новых удалились;

Двигаюсь в направлении создания двух таблиц, table и table_new.
Возможно ли как то объединить эти две таблицы для достижения описанной выше задачи ?
Или нужно пойти другим путём ?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.07.2017, 22:05
Ответы с готовыми решениями:

Порядок записей в таблице
Строки распологаются в произвольном порядке в таблице. Тоесть нет гарантии что если я внес в...

Дублирование записей в таблице
Бодрого времени суток, уважаемые форумчане! Догадываюсь, что задаю вопрос не в тот раздел, но...

Пересчет записей в таблице
Здравствуйте уважаемые форумчане! Подскажите пожалуста как сделать пересчет в категориях, при такой...

Выбор записей по таблице айдишников
Есть таблица с друзьями (userfriends)вида: userid friendid Есть таблица просто...

8
30 / 26 / 8
Регистрация: 17.09.2015
Сообщений: 498
Записей в блоге: 6
30.07.2017, 14:24 2
Может это как то поможет
SQL
1
2
3
4
5
6
BEGIN
INSERT INTO `SUPPLIERS_STAT` (`CS_ID_SUPPLIER`, `DATE_TIME`) VALUES (ID_SUPP, CONCAT(CURDATE(),' ',CURTIME()))
  ON DUPLICATE KEY UPDATE `CS_ID_SUPPLIER`=`CS_ID_SUPPLIER`;
 
UPDATE `SUPPLIERS_STAT`  SET DOWNLOAD_COUNT=DOWNLOAD_COUNT+1, `DATE_TIME`=CONCAT(CURDATE(),' ',CURTIME())  WHERE `CS_ID_SUPPLIER`=ID_SUPP;
END
Смысл то что, если записи нет она добавляется, а если есть обновляется
можно оформить в виде хранимой процедуры
0
1 / 1 / 1
Регистрация: 10.04.2016
Сообщений: 95
06.08.2017, 22:59  [ТС] 3
Спасибо за отклик. А чем отличаются UPDATE от DUPLICATE ?

Добавлено через 22 минуты
Или они связаны(2я строка и 5я)?

Сделал так:
SQL
1
INSERT INTO table1 SET category = '$category', category_id = '$category_id', list_name = '$list_name', vid = '$vid' ON DUPLICATE KEY UPDATE vid = '$vid';
Не обновляет! Каждый раз добавляет новую строку.
0
30 / 26 / 8
Регистрация: 17.09.2015
Сообщений: 498
Записей в блоге: 6
06.08.2017, 23:15 4
Какая база данных?

Добавлено через 31 секунду
нужно выполнять в одном запросе...

Добавлено через 15 секунд
SQL
1
2
3
4
INSERT INTO `SUPPLIERS_STAT` (`CS_ID_SUPPLIER`, `DATE_TIME`) VALUES (ID_SUPP, CONCAT(CURDATE(),' ',CURTIME()))
  ON DUPLICATE KEY UPDATE `CS_ID_SUPPLIER`=`CS_ID_SUPPLIER`;
 
UPDATE `SUPPLIERS_STAT`  SET DOWNLOAD_COUNT=DOWNLOAD_COUNT+1, `DATE_TIME`=CONCAT(CURDATE(),' ',CURTIME())  WHERE `CS_ID_SUPPLIER`=ID_SUPP;
Добавлено через 6 минут
SQL
1
2
3
4
INSERT INTO `MyTable` (`CS_ID_SUPPLIER`) VALUES ('value data')
  ON DUPLICATE KEY UPDATE `CS_ID_SUPPLIER`=`CS_ID_SUPPLIER`;
  
UPDATE `MyTable`  SET `CS_ID_SUPPLIER` = 'value data' WHERE `KEY` = 1 ;
Добавлено через 3 минуты
Это для примера.
Вот хранимую выдрал из своей базы

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CREATE DEFINER=`Analyzer_Price`@`%` PROCEDURE `update_or_insert_rowcount`(
    IN `RowCount` BIGINT,
    IN `SupplierID` BIGINT
 
 
)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
INSERT INTO `SUPPLIERS_STAT` (`CS_ID_SUPPLIER`,`ROW_COUNT`) VALUES (SupplierID, RowCount)
  ON DUPLICATE KEY UPDATE `CS_ID_SUPPLIER`=`CS_ID_SUPPLIER`;
UPDATE `SUPPLIERS_STAT`  SET `CS_ID_SUPPLIER` = SupplierID,  `ROW_COUNT`=RowCount WHERE `CS_ID_SUPPLIER`=SupplierID;
END
Analyzer_Price <--- это заменить на пользователя базы данных

Добавлено через 2 минуты
Вызвать так
SQL
1
CALL `update_or_insert_rowcount`('123', '123')
Добавлено через 44 секунды
процедура или добавит или обновит запись
0
1 / 1 / 1
Регистрация: 10.04.2016
Сообщений: 95
06.08.2017, 23:16  [ТС] 5
Я на php это реализую)
0
30 / 26 / 8
Регистрация: 17.09.2015
Сообщений: 498
Записей в блоге: 6
06.08.2017, 23:23 6
Цитата Сообщение от dkv01 Посмотреть сообщение
Я на php это реализую)
Я точно не в курсе, можно ли из php вызывать хранимые процедуры.

Но точно знаю что эта конструкция добавит или обновит запись
SQL
1
2
3
INSERT INTO `SUPPLIERS_STAT` (`CS_ID_SUPPLIER`,`ROW_COUNT`) VALUES (SupplierID, RowCount)
  ON DUPLICATE KEY UPDATE `CS_ID_SUPPLIER`=`CS_ID_SUPPLIER`;
UPDATE `SUPPLIERS_STAT`  SET `CS_ID_SUPPLIER` = SupplierID,  `ROW_COUNT`=RowCount WHERE `CS_ID_SUPPLIER`=SupplierID;
Добавлено через 3 минуты
Тебе просто нужно ее немного переделать под свои нужды.
Скинь код CREATE своей таблицы...

Добавлено через 22 секунды
Тебе просто нужно ее немного переделать под свои нужды.
Скинь код CREATE своей таблицы...
0
1 / 1 / 1
Регистрация: 10.04.2016
Сообщений: 95
07.08.2017, 01:35  [ТС] 7
Не фига не обновляет! Добавляет новые строки.
Таблица создана.
структура: vid/category/category_id/list_name/

vid - уникален и не меняется. Остальные поля могут меняться.
Таблица заполняется через youtube api. Тобишь нужно проверить по vid'у: если category/category_id/list_name/ изменились - обновить, если нет такого vid'а в таблице то добавить строку.

Добавлено через 2 часа 3 минуты
Вообщем, написал такой запрос:
SQL
1
2
NSERT INTO table1 (a,b,c) VALUES ($a, $b, $c)
  ON DUPLICATE KEY UPDATE a = VALUES($a), b = VALUES($b), с = VALUES($c);
Но почему то таблица не заполняется..
0
30 / 26 / 8
Регистрация: 17.09.2015
Сообщений: 498
Записей в блоге: 6
07.08.2017, 10:41 8
Лучший ответ Сообщение было отмечено dkv01 как решение

Решение

Цитата Сообщение от dkv01 Посмотреть сообщение
Не фига не обновляет! Добавляет новые строки.
Таблица создана.
А где в твоем коде update???

Добавлено через 48 секунд
Тут 2 запроса одновременно.
SQL
1
2
3
INSERT INTO `SUPPLIERS_STAT` (`CS_ID_SUPPLIER`,`ROW_COUNT`) VALUES (SupplierID, RowCount)
  ON DUPLICATE KEY UPDATE `CS_ID_SUPPLIER`=`CS_ID_SUPPLIER`;
UPDATE `SUPPLIERS_STAT`  SET `CS_ID_SUPPLIER` = SupplierID,  `ROW_COUNT`=RowCount WHERE `CS_ID_SUPPLIER`=SupplierID;
Добавлено через 31 минуту
Для примера
SQL
1
2
3
4
INSERT INTO `MyTable` (`A`,`B`,`C`) VALUES (2, 3, 4)
  ON DUPLICATE KEY UPDATE `A`=`A`;
  
UPDATE `SUPPLIERS_STAT`  SET `A` = 2,  `B` = 3, `C` = 4 WHERE `A`= 2;
Код CREATE
SQL
1
2
3
4
5
6
7
8
9
CREATE TABLE `MyTable` (
    `A` INT(11) NULL DEFAULT NULL,
    `B` INT(11) NULL DEFAULT NULL,
    `C` INT(11) NULL DEFAULT NULL,
    UNIQUE INDEX `A` (`A`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;
Добавлено через 8 минут
Условие WHERE `A`= 2; на твое усмотрение, ты же когда пытаешься обновить запись предполагаешь что она там есть,
то есть. первая конструкция вставляет запись если ее нет, а вторая обновляет если она есть.

Возможно есть элегантней решение, увы все что есть


Или вот совершенно случайно наткнулся.
на php
PHP
1
2
3
4
5
6
7
8
9
10
$res = mysql_query('select count(*) FROM table WHERE id = 1') or die();
$row = mysql_fetch_row($res);
if ($row[0] > 0)
{
    // Есть данные, обновляем
}
else
{
    // нет данных, добавляем 
}
0
1 / 1 / 1
Регистрация: 10.04.2016
Сообщений: 95
07.08.2017, 12:57  [ТС] 9
Так и не понял как работает duplicate, точнее он у меня не работает.
Последний способ конечно деревянный но ска работает!
0
07.08.2017, 12:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.08.2017, 12:57
Помогаю со студенческими работами здесь

Количество записей в связанной таблице
Здравствуйте! Есть две таблицы. Необходимо выбрать записи первой таблицы и количество записей во...

Дубликаты записей в одной таблице
Здравствуйте! Необходимо найти дубликаты записей в одной таблице по ВСЕМ! значимым полям. Возможно...

SUM() для одинаковых записей в таблице.
Добрый день. Сразу приведу пример таблиц, а после расскажу суть вопроса. Абоненты id name 1 ...

Сколько записей можно делать в таблице?
Скажите, я создаю таблицу и она заполняется по скрипту.. Какое кол-во записей может содержать...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru