Автор Тема: Как сделать update с увеличением?  (Прочитано 10110 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Как сделать update с увеличением?
« Ответ #15 : 05 Февраля 2004, 16:20:35 »
Цитировать
Varvara:
На самом деле цикл берется из проверки потомков, взависимости от количества потомков,

кол-во потомков = (cat_right - cat_left - 1) / 2
и не надо никакого цикла
Цитировать
Varvara:
до конца не могу нащупать универсальный путь.
при перемещении надо 3 варианта обрабатывать:
 - перемещение ула влево
 - перемещение узла вправо
 - перемещение вверх
(так сделано в moveAll хотя реально он не оттестирован)
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Varvara

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 16
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
FOR Макс
« Ответ #16 : 05 Февраля 2004, 17:39:59 »
Обьясни мне хоть ты как сделать так:

Рабочий пример -

$pot =($cat_right - $cat_left - 1) / 2;

for ($i=1; $i<=$pot;$i++){

$query = "INSERT INTO catalogs2 (cat_left, cat_right) values(\'$cat_left\'+\'$i\', \'$cat_right\'-\'$i\')";
mysql_query( $query, $db )or die ( "Не могу добавить новые данные в базу");
mysql_close( $db);

}

Делает то что мне надо, а то же самое с update не работает -

$pot =($cat_right - $cat_left - 1) / 2;

for ($i=1; $i<=$pot;$i++){

$query = "UPDATE catalogs2 SET cat_left=\'$cat_right\'+\'$i\', cat_right=\'$cat_right\'-\'$i\' where cat_left between \'$cat_left\' and \'$cat_right\'";

mysql_query( $query, $db )or die ( "Не могу обновить данные в базе");
mysql_close( $db);
}

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Как сделать update с увеличением?
« Ответ #17 : 05 Февраля 2004, 18:11:26 »
Цитировать
Varvara:
$pot =($cat_right - $cat_left - 1) / 2;

for ($i=1; $i<=$pot;$i++){

$query = "INSERT INTO catalogs2 (cat_left, cat_right) values(\'$cat_left\'+\'$i\', \'$cat_right\'-\'$i\')";
mysql_query( $query, $db )or die ( "Не могу добавить новые данные в базу");
mysql_close( $db);

}
что делает этот пример? Я понял что какие-то узлы добавляет, но какие ?

и что ты хочешь сделать Update-ом ?
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Varvara

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 16
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
FOR Макс
« Ответ #18 : 05 Февраля 2004, 18:26:03 »
Эти упращеные примеры по работе с родителем и потомками каталога?

У меня вопрос почему insert работает в цикле, а update нет?

А вообще мне нужно изменить значение потомков, было
после нового значения ровдителя

8 - 13
5 - 8
6 - 7
 
Как одним update изменить, что бы было так

8 -13
9 - 12
10 -11

Родитель и потомки перемещены.

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Как сделать update с увеличением?
« Ответ #19 : 05 Февраля 2004, 18:36:14 »
Цитировать
Varvara:
А вообще мне нужно изменить значение потомков, было
после нового значения ровдителя

8 - 13
5 - 8
6 - 7

Как одним update изменить, что бы было так

8 -13
9 - 12
10 -11

А для первого узла (8 - 13) - ничего менять не надо ?

UPDATE tab SET cat_left = cat_left + 4, cat_right = cat_right + 4 WHERE cat_left BETWEEN 9 AND 12
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Как сделать update с увеличением?
« Ответ #20 : 05 Февраля 2004, 18:37:59 »
Цитировать
Макс:
А для первого узла (8 - 13) - ничего менять не надо ?

а, теперь понял. там ничего не надо
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Как сделать update с увеличением?
« Ответ #21 : 05 Февраля 2004, 18:41:10 »
Цитировать
Varvara:
У меня вопрос почему insert работает в цикле, а update нет?

1. ты так и не объяснила, что делают твои запросы (то что это упрощенные примеры - мне не о чем не говорит)
2. Я хоть ничего и не понял, но по-моему для Update-запроса цикл не нужен. Просто один раз выполни запрос, который я привел выше
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Varvara

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 16
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
for Макс
« Ответ #22 : 09 Февраля 2004, 10:49:04 »
Мне не понятен алгоритм обновления потомков после перемещения, если родитель имеет несколько потомков, как их изменить все разом, поотдельности понятно.

Я хочу сделать так, зная обновленные значения родителя, можно вычеслить потомков:
1-ый cat_left+1 и cat_right-1
2-ой cat_left+2 и cat_right-2

Я хотела эти значения, увеличения и уменьшения на 1 и 2
взять из найденного количества потомков и циклично изменить, но update не помогает!?

Может создать временную таблицу и insert изменить поля
cat_left и cat_right, а потом обновить основную таблицу.

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Как сделать update с увеличением?
« Ответ #23 : 09 Февраля 2004, 17:39:33 »
Цитировать
Varvara:
как их изменить все разом, поотдельности понятно.
я уже несколько раз в этой ветке показал пример update-запроса, который изменяет смещения для всех потомков. Если тебе он не помог, то это уже проблемы реализации алгоритма. Ищи ошибку.
Цитировать
Varvara:
Я хочу сделать так, зная обновленные значения родителя, можно вычеслить потомков:
1-ый cat_left+1 и cat_right-1
2-ой cat_left+2 и cat_right-2

Я хотела эти значения, увеличения и уменьшения на 1 и 2
взять из найденного количества потомков и циклично изменить,
вот здесь совершенно ничего не понял
Цитировать
Varvara:
Может создать временную таблицу и insert изменить поля
cat_left и cat_right, а потом обновить основную таблицу
если проблему можно решить без временной таблицы, то не надо ее использовать
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Varvara

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 16
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
for Макс
« Ответ #24 : 09 Февраля 2004, 20:45:42 »
Ты не понял что это:

1-ый cat_left+1 и cat_right-1
2-ой cat_left+2 и cat_right-2

Это и есть алгоритм перемещения потомков родителя между другими родителями и потомками.

Данное пример:
UPDATE tab SET cat_left = cat_left + 4, cat_right = cat_right + 4 WHERE cat_left BETWEEN 9 AND 12

НЕ УНИВЕРСАЛЬНЫЙ СПОСОБ, он не подходит всех случаев перемещения (пока говорю перемещении  только вверху вниз)

Мне нужен ответ как ИЗМЕНИТЬ потомки новыми значениями ни как не связанными со старыми, связь есть только с новым значением родителем по схеме которую ты не понял.

Не ужели UPDATE не работает в цикле !!! ???
ЭТО ГЛАВНЫЙ ВОПРОС?

Оффлайн Varvara

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 16
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
UPDATE не работает в цикле !!! ???
« Ответ #25 : 09 Февраля 2004, 20:52:42 »
Как работает UPDATE в цикле? И работает ли вообще?!!
Можно пример!


for ($i=1; $i<=$pot;$i++){
$query = "UPDATE catalogs SET cat_left=\'$i\', cat_right=\'$i\' where cat_left between \'$cat_left\' and \'$cat_right\'";
mysql_query( $query, $db )or die ( "Не могу обновить данные в базе");
}
mysql_close( $db);

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Как сделать update с увеличением?
« Ответ #26 : 09 Февраля 2004, 23:34:22 »
Цитировать
Varvara:
UPDATE tab SET cat_left = cat_left + 4, cat_right = cat_right + 4 WHERE cat_left BETWEEN 9 AND 12
я же писал, что этот запрос лишь пример - для реального перемещения надо делать запрос на порядок сложнее. Пример можешь посмотреть в классе dbtree (там 3 варианта перемещения рассматривается  - влево, вправо и верх и для каждого варианта свой запрос)
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Как сделать update с увеличением?
« Ответ #27 : 09 Февраля 2004, 23:37:01 »
Varvara
update в цикле работает, ты неправильный запрос делаешь. Такого :
Цитировать
Varvara:
cat_left=\'$i\', cat_right=\'$i\'
в Nested Sets вообще не может быть (cat_left не может быть равен cat_right).
Далее если ты делаешь в цикле изменение, то не надо писать в условии
Цитировать
Varvara:
cat_left between \'$cat_left\' and \'$cat_right\'

Там должно быть что-то вроде
WHERE cat_id = $cat_id
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Varvara

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 16
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
for Макс
« Ответ #28 : 10 Февраля 2004, 06:07:54 »
Макс СПАСИБО за помощь, но ты не врубаешься!

В классе dbtree, только перемещение потомков, но не родителя с потомками, если б было так просто.

Который раз я задаю вопрос как увеличить значение в прогрессии 1, 2, 3 и т.д.

Оффлайн Varvara

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 16
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Как сделать update с увеличением?
« Ответ #29 : 10 Февраля 2004, 06:11:00 »
Я не спрашиваю если в Nested Sets или нет, ВОПРОС совсем другой, не про Nested Sets, если не знаешь не пиши!!!

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28