powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как сделать update после insert?
15 сообщений из 15, страница 1 из 1
Как сделать update после insert?
    #39942191
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в хранимке
Делаю вставку в таблицу,
получаю id вставленного
потом надо сделать update нескольких записей в этой же таблице в выбранных селектом из этой же таблицы

вот так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
 INSERT INTO goods.spr_type (id_parent, order_, name)
      VALUES (id_parent, 0, name_);
    SET @id = LAST_INSERT_ID();
    SET @p = REPLACE(list, '#', @id);
   
   
      UPDATE  spr_type, (SELECT 
          id,
          FIND_IN_SET(id, @p) AS d
        FROM spr_type
        WHERE id_parent = 0
        ORDER BY d) AS cte
      SET spr_type.order_ = cte.d
      WHERE spr_type.id = cte.id;
 


update не происходит (или select?)
но если update завернуть в хранимку то

Код: sql
1.
2.
3.
4.
5.
6.
INSERT INTO goods.spr_type (id_parent, order_, name)
      VALUES (id_parent, 0, name_);
    SET @id = LAST_INSERT_ID();
    SET @p = REPLACE(list, '#', @id);

call proc(@p);


проходит
как можно обойтись без второй хранимки?
...
Рейтинг: 0 / 0
Как сделать update после insert?
    #39942194
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
как можно обойтись без второй хранимки?

Отладить код, чтобы не наблюдать непонятного течения процесса. Делайте fiddle - будем смотреть.
...
Рейтинг: 0 / 0
Как сделать update после insert?
    #39942200
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

вытащить для fiddle куча работы, не факт , что не будет ошибки...
есть подозрение , что после insert таблица залочена в данной "сессии"
это как-то проверить можно?
...
Рейтинг: 0 / 0
Как сделать update после insert?
    #39942213
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
есть подозрение , что после insert таблица залочена в данной "сессии"
Никаких оснований к тому не вижу - даже приблизительно.

вадя
это как-то проверить можно?

Как обычно - отладка. Делаешь служебную таблицу, и начинаешь инсертить туда всё подряд - номер точки исполнения, штамп времени, значения переменных, количество изменённых записей и т.п.
...
Рейтинг: 0 / 0
Как сделать update после insert?
    #39942219
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

вот такой код
Код: sql
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.
    INSERT LOW_PRIORITY INTO goods.spr_type (id_parent, order_, name)
      VALUES (id_parent, 0, name_);
    SET @id = LAST_INSERT_ID();
    SET @p = REPLACE(list, '#', @id);

    CALL proc(@p);
    -- 
    --       UPDATE  spr_type, (SELECT 
    --           id,
    --           FIND_IN_SET(id, @p) AS d
    --         FROM spr_type
    --         WHERE id_parent = 0
    --         ORDER BY d ) AS cte
    --       SET spr_type.order_ = cte.d
    --       WHERE spr_type.id = cte.id;
    -- 

    SELECT  @id,   0 AS d
    UNION ALL
    SELECT  @p,    0 AS d
    UNION ALL
    SELECT  id,    1 AS d
    --           FIND_IN_SET(id, @p) AS d
    FROM spr_type
    WHERE id_parent = 0
    ORDER BY d
    ;


производит вставку и обновление правильно, но выдаёт
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
52    0 
38,52,39,1,4    0 
39    1 
39    1 
39    1 
39    1 
39    1 
39    1 
39    1 
39    1 
39    1 
39    1 
39    1 
 
...
Рейтинг: 0 / 0
Как сделать update после insert?
    #39942238
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
даже совсем простое

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
INSERT LOW_PRIORITY INTO goods.spr_type (id_parent, order_, name)
      VALUES (id_parent, 0, name_);


 SET @q=0;
    SELECT
      id,   @q:=@q+1 AS q
    FROM spr_type
    WHERE id_parent = 0


выводит
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
59    1 
59    2 
59    3 
59    4 
59    5 
59    6 
59    7 
59    8 
59    9 
59    10 
59    11 
59    12 
59    13 
13 - это всего записей в таблице....
но с WHERE id_parent = 0
должно быть меньше

таблица spr_type заблокирована?
...
Рейтинг: 0 / 0
Как сделать update после insert?
    #39942250
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
Делайте fiddle - будем смотреть.
а как там хранимки сделать?
...
Рейтинг: 0 / 0
Как сделать update после insert?
    #39942291
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
как там хранимки сделать?

Да как обычно.. пример fiddle .
...
Рейтинг: 0 / 0
Как сделать update после insert?
    #39942296
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,
а что это значит?
Код: plaintext
Create table/tablespace 'spr_type' failed, as disk is full

и что это 22108109
...
Рейтинг: 0 / 0
Как сделать update после insert?
    #39942301
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как сделать update после insert?
    #39942302
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
а что это значит?
Код: plaintext
Create table/tablespace 'spr_type' failed, as disk is full
Ну проблема у хостера... кто-то засрал весь диск, на котором работает 8-я версия MySQL. Бывает... починят.
...
Рейтинг: 0 / 0
Как сделать update после insert?
    #39942305
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
как это понимать?
Что именно? не вижу криминала...
...
Рейтинг: 0 / 0
Как сделать update после insert?
    #39942307
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
Что именно? не вижу криминала...
что выводит хранимка и простой сеелект
...
Рейтинг: 0 / 0
Как сделать update после insert?
    #39942319
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот теперь сядь и ХОРОШО подумай - что будет использоваться в WHERE id_parent = 0 в запросе и в хранимке в качестве id_parent .

Hint: почему у меня в примерах ХП такие странные имена параметров?
...
Рейтинг: 0 / 0
Как сделать update после insert?
    #39942323
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
Вот теперь сядь и ХОРОШО подумай - что будет использоваться в WHERE id_parent = 0 в запросе и в хранимке в качестве id_parent .

Hint: почему у меня в примерах ХП такие странные имена параметров?
да уже сам разобрался.....
и на старуху бывает....
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как сделать update после insert?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]