Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Типо вложенного цикла что ли)
 
 автор: ddhvvn   (03.01.2009 в 18:45)   письмо автору
 
 

Допустим есть такой массив:

1 = 1
5 = 3
6 = 6
14 = 4
12 = 5
7 = 2

Можно, конечно, отсотртировать его по ключам.
столбцы в таблицы, которые соотвествуют массиву:
id   ...     position

Собственно нужно обновить таблицу в соответсвии с массивом
Тупо перебирать foreachем или другим циклом массив, а внутри цикла делать UPDATE, по моему как то нехорошо и должно быть более красивое решение, но пока я его не нашел.
Подскажите, если кто знает )

  Ответить  
 
 автор: BinLaden   (03.01.2009 в 20:48)   письмо автору
 
   для: ddhvvn   (03.01.2009 в 18:45)
 

Лучше, в принципе, и не сделаешь.

  Ответить  
 
 автор: ddhvvn   (03.01.2009 в 21:15)   письмо автору
 
   для: BinLaden   (03.01.2009 в 20:48)
 

Подождем Трианона...

  Ответить  
 
 автор: Trianon   (03.01.2009 в 22:58)   письмо автору
 
   для: ddhvvn   (03.01.2009 в 21:15)
 

загнать данные в другую (возможно - временную) таблицу, и выполнить один UPDATE. Таблицу очистить.
если временные таблицы запрещены - стандартный ход с двумя обычными (sequence, data).
Пожалуй, второй вариант понадежнее будет.

PS. Вообще-то я зашел сюда совершенно случайно.
Кнопок навигации пред./след. тема на форуме давно уже нет,
а формулировка темы к визиту не располагалет.

  Ответить  
 
 автор: Trianon   (03.01.2009 в 23:20)   письмо автору
 
   для: Trianon   (03.01.2009 в 22:58)
 

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

  Ответить  
 
 автор: ddhvvn   (04.01.2009 в 00:19)   письмо автору
 
   для: Trianon   (03.01.2009 в 23:20)
 

А вот этот пост, если честно, я вообще не понял ...

  Ответить  
 
 автор: Trianon   (04.01.2009 в 01:57)   письмо автору
 
   для: ddhvvn   (04.01.2009 в 00:19)
 

Как одним оператором несколько строк в таблицу добавить, я надеюсь, расписывать не надо?

  Ответить  
 
 автор: ddhvvn   (04.01.2009 в 10:41)   письмо автору
 
   для: Trianon   (04.01.2009 в 01:57)
 

нет )
но если честно, у меня не получается это сделать во временной таблице...
или Вы про "исходную" таблицу?

  Ответить  
 
 автор: Trianon   (04.01.2009 в 11:22)   письмо автору
 
   для: ddhvvn   (04.01.2009 в 10:41)
 

<?php

$data 
= array(=> 1=> 3=> 614 => 412 => 5=> 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());

?>

  Ответить  
 
 автор: ddhvvn   (04.01.2009 в 11:43)   письмо автору
 
   для: Trianon   (04.01.2009 в 11:22)
 

офигеть... будем разбираться

СПАСИБО! )))

  Ответить  
 
 автор: Trianon   (04.01.2009 в 11:50)   письмо автору
 
   для: Trianon   (04.01.2009 в 11:22)
 

Ау! Знатоки MySQL во всех его проявлениях!
Или может я (как ненастоящий сварщик) ошибаюсь с непрерывностью диапазоза instbl.id , и так писать нельзя?

  Ответить  
 
 автор: ddhvvn   (04.01.2009 в 12:30)   письмо автору
 
   для: Trianon   (04.01.2009 в 11:50)
 

О_О а я ток было собрался пробовать код... )

  Ответить  
 
 автор: Trianon   (04.01.2009 в 12:42)   письмо автору
 
   для: ddhvvn   (04.01.2009 в 12:30)
 

ну и попробовали бы. Что помешало-то?

  Ответить  
 
 автор: ddhvvn   (04.01.2009 в 13:01)   письмо автору
 
   для: Trianon   (04.01.2009 в 12:42)
 

Обязательно попробую )

  Ответить  
 
 автор: Root   (05.01.2009 в 13:36)   письмо автору
 
   для: Trianon   (04.01.2009 в 11:50)
 

>Или может я (как ненастоящий сварщик) ошибаюсь с непрерывностью диапазоза instbl.id , и так писать нельзя?

Ох любите Вы загадки.. :-)
Странно, что в мануале толком об этом ничего не написано.
Но я тут потестил немножко и..
Нет, Вы не ошибаетесь, Insert блокирует таблицу, и соответственно и диапазон первичных ключей будет непрерывным.

  Ответить  
 
 автор: ddhvvn   (04.01.2009 в 00:18)   письмо автору
 
   для: Trianon   (03.01.2009 в 22:58)
 

ммм... спасибо, что зашли )

переваривать буду завтрасегодня утром! )

  Ответить  
 
 автор: ddhvvn   (04.01.2009 в 11:14)   письмо автору
 
   для: Trianon   (03.01.2009 в 22:58)
 

>загнать данные в другую (возможно - временную) таблицу, и выполнить один UPDATE. Как такое сделать чет тоже не догоню...
Пока придеться, наверное, все же в цикле...

* блин когда же я уже книжку по mysql куплю... )*

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования