Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 13.09.2019, 11:48   #11
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 3,461
По умолчанию

еще есть SQL запрос
Код:
INSERT .... ON DUPLICATE ... UPDATE
ADSoft вне форума   Ответить с цитированием
Старый 13.09.2019, 11:57   #12
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 26,214
По умолчанию

Цитата:
Сообщение от ADSoft Посмотреть сообщение
еще есть SQL запрос
т.е. Вы тему не читали, просто решили ответить, да?

Тогда, изложу Вам то, что Вы пропустили.
в пост #3 Аватар предложил этот вариант. автор темы упирается, считает, что это ему не подходит. я в сообщении перед вашим (#10) пытался убедить его в том, что он не прав.
Serge_Bliznykov вне форума   Ответить с цитированием
Старый 13.09.2019, 13:23   #13
volni
Форумчанин
 
Регистрация: 16.03.2019
Сообщений: 111
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Это Вам только кажется.

Вы рассмотрите конкретный пример.
вот, скажем, даны три строчки
param
1
2
3
вы делаете UPDATE для строк с param (1,7,9)
очевидно, что нужно сделать UPDATE одной строке и добавить 2 строки c param 7 и 9
Так?

Вот один INSERT и решает эту задачу.
А можете привести пример, для этого будет выглядеть команда,просто я читаю про эту конструкцию и везде она используется для другого.
Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Вам же функцию mysqli_affected_rows() показали. Используйте её
Код:
UPDATE .... 
IF mysqli_affected_rows()=0 Then
     INSERT ....
Если возможно сделать предыдущим методом, то я разобрался бы лучше в нем,т.к. здесь всегда будет делать запрос update, даже там, где он не нужен, для чего требуется лишнее время. Хотелось бы сразу сделать грамотно=)

Последний раз редактировалось volni; 13.09.2019 в 13:27.
volni вне форума   Ответить с цитированием
Старый 13.09.2019, 13:28   #14
volni
Форумчанин
 
Регистрация: 16.03.2019
Сообщений: 111
По умолчанию

А, вроде понял, чуть позже отпишу, если верно понял=)
Ну у меня первый вариант врятли будет работать, т.к. в данной sql таблице первичный ключ не может повторяться=(
Код:
CREATE TABLE in_copies(
id int unsigned NOT NULL auto_increment,
DocumentNumber varchar(255) NOT NULL,
CopyData datetime,
ReasonCopy varchar(50),
CopyCome int unsigned,
CopyGo int unsigned,
PRIMARY KEY (id),
FOREIGN KEY (DocumentNumber) REFERENCES in_main(DocumentNumber) ON DELETE CASCADE ON UPDATE CASCADE
);

Последний раз редактировалось volni; 13.09.2019 в 13:35.
volni вне форума   Ответить с цитированием
Старый 13.09.2019, 13:29   #15
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 26,214
По умолчанию

Хорошо
Serge_Bliznykov вне форума   Ответить с цитированием
Старый 13.09.2019, 13:45   #16
volni
Форумчанин
 
Регистрация: 16.03.2019
Сообщений: 111
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Хорошо
В данной ситуации мне лучше воспользоваться вторым вариантом, как вы считаете?=)
Я про
Код:
UPDATE .... 
IF mysqli_affected_rows()=0 Then
     INSERT ....
volni вне форума   Ответить с цитированием
Старый 13.09.2019, 14:18   #17
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 26,214
По умолчанию

Цитата:
Сообщение от volni Посмотреть сообщение
Ну у меня первый вариант врятли будет работать, т.к. в данной sql таблице первичный ключ не может повторяться=(
ни в одной таблице никогда первичный ключ не может повторяться. в этом его смысл и сермяжная суть!


Цитата:
Сообщение от volni Посмотреть сообщение
В данной ситуации мне лучше воспользоваться вторым вариантом, как вы считаете?=)
Я про
Код:
UPDATE .... 
IF mysqli_affected_rows()=0 Then
     INSERT ....
не знаю.

Вы так и не привели пример того, что Вам нужно сделать.
Serge_Bliznykov вне форума   Ответить с цитированием
Старый 13.09.2019, 14:21   #18
volni
Форумчанин
 
Регистрация: 16.03.2019
Сообщений: 111
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Хорошо
Давайте я попробую полностью описать свою проблему, может тогда понятней будет, в чем у меня затруднения.
Есть гостовская таблица в html(прикрепил рисунок).
Если пользователь просто обновляет уже имеющуюся информацию(первые 4 строки), то все норм. Но если хочет добавить 5,6,7,8..... строку, то здесь уже начинаются проблемы, т.к. я не знаю, как это организовать. Поэтому и спрашивал про mysqli_affected_rows() и т.д.
То есть нужно как-то сделать следующее: если к введенным данным update не подходит, то делать insert.
Изображения
 

Последний раз редактировалось volni; 13.09.2019 в 14:27.
volni вне форума   Ответить с цитированием
Старый 13.09.2019, 14:22   #19
volni
Форумчанин
 
Регистрация: 16.03.2019
Сообщений: 111
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ни в одной таблице никогда первичный ключ не может повторяться. в этом его смысл и сермяжная суть
Я понимаю=)
Я в том смысле, что даже в теории пользователь в таблице, которую я создал не сможет даже об этом подумать)
volni вне форума   Ответить с цитированием
Старый 13.09.2019, 14:54   #20
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 26,214
По умолчанию

Цитата:
Сообщение от volni Посмотреть сообщение
То есть нужно как-то сделать следующее: если к введенным данным update не подходит,
тут всё сложнее.

вот он заходит и УДАЛЯЕТ строчку с "Основание " = 3
ваши действия?

дальше, он заходит и исправляет строчку с "Основание" = 2 на "Основание" = 5, строчку с Основание = 1 исправляет на Основание = 6
и дописывает новую строчку с Основание 1
ваши действия?

На самом деле, тут множество вариантов и подводных камней (учитывать логгирование - кто что исправил, например, надо или нет).
Можно ли вносить записи в произвольном порядке?

в общем случае, я бы поступал так:
Код:
Lock Table in_copies
Delete FROM in_copies where DocumentNumber  = <вашДокументId>
INSERT INTO in_copies ...... <все строчки из HTML таблицы>
UnLock Table  in_copies
Lock / UnLock - это в случае, если есть опасность, что два пользователя могут изменять один документ.
Serge_Bliznykov вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сделать,чтобы запрашивалось сколько вводить строк. наследование класса Евгения Е Общие вопросы C/C++ 7 15.12.2014 14:58
помогите создать запрос чтобы высветился в Делфи galiya123 Помощь студентам 1 26.05.2014 16:19
Как сделать, чтобы DOS выдавал запрос int 21 по русски zla9_kolu4ka Assembler - Ассемблер 3 11.10.2013 11:07
как выполнить sql запрос в базу mysql по нажатию клавиши в php undead92 PHP 1 06.07.2012 20:17
SQL запрос внесения картинки в базу Darcangel БД в Delphi 5 11.01.2012 09:23


21:16.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.