Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > занести значения в разные строки


Автор: KoLiZeI 20.3.2008, 10:51
Народ подскажите можно ли занести одним запросом значения сразу в несколько строк
Допустим есть таблица 
<название> <Значение>
название1    Значение1
название2    Значение2
название3    Значение3
название4    Значение4

Нужно обновить значения во всех  полях, нужно вызывать UPDATE для каждого поля, или можно сделать одним запросом? smile 

Автор: Akina 20.3.2008, 10:59
Цитата(KoLiZeI @  20.3.2008,  11:51 Найти цитируемый пост)
Нужно обновить значения во всех  полях, нужно вызывать UPDATE для каждого поля, или можно сделать одним запросом?

Ответ зависит от того, как именно задано, что и где надо обновлять

Автор: KoLiZeI 20.3.2008, 11:16
В каком смысле?
Строки заданы в виде название->значение
Таких строк N
Допустим что значения из этих строк выводятся в форме и при нажатии Сохранить эти строки должны обновиться, точнее 1 поле в кажой строке! 

Автор: skyboy 20.3.2008, 11:38
и как БД "догадается", в каких записях какие значения вставлять?
нет, тебе надо прописывать явно. другой вопрос, что SQL-запрос можно сгенерировать, а не указывать руками все возможные сочетания 
"имя+значение"

Автор: Akina 20.3.2008, 12:48
Тогда по 1 запросу на каждую запись.
Вот если бы на сервере была таблица соответствия обновлений - обошелся бы одним запросом.

Автор: nbsp 10.4.2008, 13:22
мой случай:

есть таблица (mytable):

<id>   <count>
  1          10
  4           5
  5          55
  9          11

допустим, через форму передаются значения id и новые значения count.
хотелось бы одним запросом обновить значения, сгенерировав запрос.

это "псевдо синтаксис", естественно он НЕ рабочий (взято у человека с аналогичной задачей):

UPDATE mytable SET count = '111, 333, 777, 222' WHERE id = '1, 4, 5, 9'

Возможно ли сделать подобное?

Автор: Akina 10.4.2008, 13:34
Нет.
Однако можно обойтись двумя запросами.
Создаешь временную таблицу той же структуры (в принципе это третий запрос), и потом insert into temp_table(id, val) values (...) и затем update из этой временной таблицы.

Автор: nbsp 10.4.2008, 14:09
 smile 

Автор: mishaSL 10.4.2008, 16:19
nbsp, можно одним запросом, к примеру так:
Код

UPDATE mytable
SET count = CASE id
   WHEN 1 THEN 111
   WHEN 4 THEN 333
   WHEN 5 THEN 777
   WHEN 9 THEN 222
END
WHERE id IN(1, 4, 5, 9)

Автор: Feldmarschall 10.4.2008, 17:13
только опять же непонятно - зачем.

Автор: mishaSL 10.4.2008, 17:19
Цитата(Feldmarschall @  10.4.2008,  17:13 Найти цитируемый пост)
только опять же непонятно - зачем. 

Пример, который я привел, использую когда необходимо обновить сразу несколько записей и при этом известно их ID. К примеру, обновление порядка следования пунктов меню или других элементов.

Автор: Feldmarschall 10.4.2008, 17:22
ну, я не к тебе лично, а вообще к повторяющейся уже в который раз суете "одним запросом".
точно так же обновление порядков можно сделать двумя последовательными, и ничего не случится.

Автор: nbsp 10.4.2008, 20:40
mishaSL, большое спасибо за ваш вариант, всё отлично работает.

Feldmarschall, приведите, пожалуйста, ваш вариант запроса.

Автор: Feldmarschall 10.4.2008, 21:38
nbsp, если из моих слов вариант непонятен, то приводить его тем более смысла нет.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)