Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Объеденить несколько UPDATE

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
zzzzzz
Отправлено: 04 Ноября, 2013 - 16:40:44
Post Id


Гость


Покинул форум
Сообщений всего: 117
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)




Здравствуйте. Имеются 3 запроса у которых WHERE один и тот же.

$psql4 = "UPDATE node SET `title`='%s', `show`='%s' WHERE nid='%s'";
$psql5 = "UPDATE field_data_body SET `body_value`='%s' WHERE nid='%s'";
$psql7 = "UPDATE field_data_category SET `category_id`='%s' WHERE nid='%s'";

Могу объединить с помощью UNION но думаю есть более грациозная реализация

Спасибо
 
 Top
teddy
Отправлено: 04 Ноября, 2013 - 17:20:33
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Если нужно обновить одним запросом три таблицы, тогда можно использовать multi_query, который нам предлагает MySQLi

Только буква p в начале каждой переменной насторожила.. если вы используете PostgreSQL
тогда вот пример из мануала, в принципе одно и то же
http://us2.php.net/manual/ru/fun...ion.pg-query.php
(Добавление)
Если нужно использовать один раз ключевое слово WHERE, то можно ещё так:
CODE (SQL):
скопировать код в буфер обмена
  1. UPDATE `node`, `field_data_body`, `field_data_category` SET `node`.`title`='%s',
  2. `field_data_body`.`body_value`='%s', `field_data_category`.`category_id`='%s' WHERE `node`.`nid`='%s' AND `field_data_body`.`nid`='%s' AND `field_data_category`.`nid`='%s'
 
 Top
zzzzzz
Отправлено: 04 Ноября, 2013 - 17:44:16
Post Id


Гость


Покинул форум
Сообщений всего: 117
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)




После WHERE используются три поля nid с одинаковыми значениями, соответственно передать в sprintf() нужно три одинаковых переменных.



Правильно ли это?
(Добавление)
нужно что-то типа WHERE *.nid = '%s'
(Добавление)
и psql это у меня pattern sql )))

(Отредактировано автором: 04 Ноября, 2013 - 17:48:21)

 
 Top
teddy
Отправлено: 04 Ноября, 2013 - 17:48:31
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




zzzzzz пишет:
Правильно ли это?

Не думаю. Если у вас одинаковые значения, зачем трижды вызывать эту функцию и создавать разные переменные? Достаточно создать 1 переменную и положить в нее то значение, которое везде одинаковое и в запрос уже в 3 местах подставлять эту переменную.
 
 Top
zzzzzz
Отправлено: 04 Ноября, 2013 - 18:03:03
Post Id


Гость


Покинул форум
Сообщений всего: 117
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)




функцию вызываю один раз, но как вы видите после WHERE в запросе стоят три маркера у которых одинаковое значение, соответственно эти маркеры я должен заполнить и получается так

sprintf(..., $nid, $nid, $nid)
 
 Top
teddy
Отправлено: 04 Ноября, 2013 - 18:18:22
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Если полученная строка устраивает вас как результат, то можно и даже нужно для корректного апдейта данных.
 
 Top
zzzzzz
Отправлено: 04 Ноября, 2013 - 18:29:16
Post Id


Гость


Покинул форум
Сообщений всего: 117
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)




Устраивает полностью, спасибо
 
 Top
deblogger
Отправлено: 05 Ноября, 2013 - 04:34:09
Post Id


Новичок


Покинул форум
Сообщений всего: 59
Дата рег-ции: Нояб. 2013  


Помог: 0 раз(а)

[+]


zzzzzz пишет:
есть более грациозная реализация


Есть. Переделать бд так, чтобы не пришлось писать 3 одинаковых значения в три разные таблицы.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB