|
|
|
| Допустим есть такой массив:
1 = 1
5 = 3
6 = 6
14 = 4
12 = 5
7 = 2
|
Можно, конечно, отсотртировать его по ключам.
столбцы в таблицы, которые соотвествуют массиву:
Собственно нужно обновить таблицу в соответсвии с массивом
Тупо перебирать foreachем или другим циклом массив, а внутри цикла делать UPDATE, по моему как то нехорошо и должно быть более красивое решение, но пока я его не нашел.
Подскажите, если кто знает ) | |
|
|
|
|
|
|
|
для: ddhvvn
(03.01.2009 в 18:45)
| | Лучше, в принципе, и не сделаешь. | |
|
|
|
|
|
|
|
для: BinLaden
(03.01.2009 в 20:48)
| | Подождем Трианона... | |
|
|
|
|
|
|
|
для: ddhvvn
(03.01.2009 в 21:15)
| | загнать данные в другую (возможно - временную) таблицу, и выполнить один UPDATE. Таблицу очистить.
если временные таблицы запрещены - стандартный ход с двумя обычными (sequence, data).
Пожалуй, второй вариант понадежнее будет.
PS. Вообще-то я зашел сюда совершенно случайно.
Кнопок навигации пред./след. тема на форуме давно уже нет,
а формулировка темы к визиту не располагалет. | |
|
|
|
|
|
|
|
для: Trianon
(03.01.2009 в 22:58)
| | подумав... в принципе можно и без sequence-таблицы.
Диапазон первичных ключей от вставки одного оператора будет непрерывным.
По нему и можно отфильтровать требуемое. | |
|
|
|
|
|
|
|
для: Trianon
(03.01.2009 в 23:20)
| | А вот этот пост, если честно, я вообще не понял ... | |
|
|
|
|
|
|
|
для: ddhvvn
(04.01.2009 в 00:19)
| | Как одним оператором несколько строк в таблицу добавить, я надеюсь, расписывать не надо? | |
|
|
|
|
|
|
|
для: Trianon
(04.01.2009 в 01:57)
| | нет )
но если честно, у меня не получается это сделать во временной таблице...
или Вы про "исходную" таблицу? | |
|
|
|
|
|
|
|
для: ddhvvn
(04.01.2009 в 10:41)
| |
<?php
$data = array(1 => 1, 5 => 3, 6 => 6, 14 => 4, 12 => 5, 7 => 2);
$sql = array();
foreach($data as $key =>$val)
$sql[] = "('".mysql_escape_string($key)."','".mysql_escape_string($val)."')";
$sql = "INSERT INTO instbl (`key`, `val`) VALUES " . implode(',',$sql);
$res = mysql_query($sql) or die("Error in $sql" .mysql_error());
$num = mysql_affected_rows();
$id = mysql_insert_id();
$idl = $id-1+$num;
$sql = "UPDATE updtbl u JOIN instbl i ON u.id=i.key
SET u.val = i.val
WHERE i.id BETWEEN $id AND $idl";
$res = mysql_query($sql) or die("Error in $sql" .mysql_error());
$sql = "DELETE FROM instbl WHERE id BETWEEN $id AND $idl";
$res = mysql_query($sql) or die("Error in $sql" .mysql_error());
?>
|
| |
|
|
|
|
|
|
|
для: Trianon
(04.01.2009 в 11:22)
| | офигеть... будем разбираться
СПАСИБО! ))) | |
|
|
|
|
|
|
|
для: Trianon
(04.01.2009 в 11:22)
| | Ау! Знатоки MySQL во всех его проявлениях!
Или может я (как ненастоящий сварщик) ошибаюсь с непрерывностью диапазоза instbl.id , и так писать нельзя? | |
|
|
|
|
|
|
|
для: Trianon
(04.01.2009 в 11:50)
| | О_О а я ток было собрался пробовать код... ) | |
|
|
|
|
|
|
|
для: ddhvvn
(04.01.2009 в 12:30)
| | ну и попробовали бы. Что помешало-то? | |
|
|
|
|
|
|
|
для: Trianon
(04.01.2009 в 12:42)
| | Обязательно попробую ) | |
|
|
|
|
|
|
|
для: Trianon
(04.01.2009 в 11:50)
| | >Или может я (как ненастоящий сварщик) ошибаюсь с непрерывностью диапазоза instbl.id , и так писать нельзя?
Ох любите Вы загадки.. :-)
Странно, что в мануале толком об этом ничего не написано.
Но я тут потестил немножко и..
Нет, Вы не ошибаетесь, Insert блокирует таблицу, и соответственно и диапазон первичных ключей будет непрерывным. | |
|
|
|
|
|
|
|
для: Trianon
(03.01.2009 в 22:58)
| | ммм... спасибо, что зашли )
переваривать буду завтрасегодня утром! ) | |
|
|
|
|
|
|
|
для: Trianon
(03.01.2009 в 22:58)
| | >загнать данные в другую (возможно - временную) таблицу, и выполнить один UPDATE. Как такое сделать чет тоже не догоню...
Пока придеться, наверное, все же в цикле...
* блин когда же я уже книжку по mysql куплю... )* | |
|
|
|