powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / хитро обновить таблицу с лимитом
8 сообщений из 8, страница 1 из 1
хитро обновить таблицу с лимитом
    #38423607
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть таблица
tableP(idp,status); пускай магазины, для простоты их номер только и статут(1- активен, 0 - нет)

tableC(idc,fk_p1,fk_p2,fk_p3) - изделия, которые состоят из трёх деталей, ссылки на магазины - в каком эту деталь можно купить.
ВАЖНО - не может быть чтобы две ссылки указывали на один магазин - тоесть все три детали любого изделия покупаються в РАЗНЫХ магазинах.

тут один из магазинов закрываеться. например idp=100

надо, в таблице изделий обновить не больше 10 строк(например 10)
вписав им вместо выбывшего магазина - магазин 20 скажем.

тоесть нас интересуют только те изделия, для сборки которых магазин 20 не учавствует, а учавсвует 100.

вот уже пол дня сижу гадаю, и не могу составить запрос. была идея по простому

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
set @current = 20;
UPDATE 

p join C on (c.fk_p1 = p.idp or c.fk_p2 = p.idp or c.fk_p3 = p.idp)

set 
c.fk_p1=IF(c.fk_p1 = p.idp, @current, c.fk_p1)
c.fk_p2=IF(c.fk_p2 = p.idp, @current, c.fk_p2)
c.fk_p3=IF(c.fk_p3 = p.idp, @current, c.fk_p3)

where
p.status = 0 and (@current NOT IN (c.fk_p1,c.fk_p2,c.fk_p3))

limit 10



Словами -
1)джоин С и Р где одна из трёх ссылок С указывает на Р
2)какая из сылок указывала на Р - ту и обновляем на заданное значение current, другие две оставляем без изменений
3)для Р расматриваем только закрытые - где статут 0, для с - среди трёх ссылок не должно быть ссылки на current до обновления
...
Рейтинг: 0 / 0
хитро обновить таблицу с лимитом
    #38423610
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453,

но по простому - лимит нельзя использовать сдесь

Кому интересно, зачем ограничение - а вот так вот - магазины чесные, и видя что один выбыл, каждый из них в базе делает апдейт, предлагая себя вместо выбывшего, но не болле чем для 10 изделий... ну чтоб остальным активным магазинам тоже можно было расширить бизнес. :)
...
Рейтинг: 0 / 0
хитро обновить таблицу с лимитом
    #38423692
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex564657498765453,

дык, а так пробовал ?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
set @current = 20;
UPDATE 

(select .... from
p join C on (c.fk_p1 = p.idp or c.fk_p2 = p.idp or c.fk_p3 = p.idp)
where
p.status = 0 and (@current NOT IN (c.fk_p1,c.fk_p2,c.fk_p3)) 
limit 10) a

set 
 a.fk_p1=IF(a.fk_p1 = a.idp, @current, a.fk_p1)
,a.fk_p2=IF(a.fk_p2 = a.idp, @current, a.fk_p2)
,a.fk_p3=IF(a.fk_p3 = a.idp, @current, a.fk_p3)
...
Рейтинг: 0 / 0
хитро обновить таблицу с лимитом
    #38424157
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwerty112alex564657498765453,

дык, а так пробовал ?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
set @current = 20;
UPDATE 

(select .... from
p join C on (c.fk_p1 = p.idp or c.fk_p2 = p.idp or c.fk_p3 = p.idp)
where
p.status = 0 and (@current NOT IN (c.fk_p1,c.fk_p2,c.fk_p3)) 
limit 10) a

set 
 a.fk_p1=IF(a.fk_p1 = a.idp, @current, a.fk_p1)
,a.fk_p2=IF(a.fk_p2 = a.idp, @current, a.fk_p2)
,a.fk_p3=IF(a.fk_p3 = a.idp, @current, a.fk_p3)



выдаёт ошибку - target table a of the UPDATE is not updateable
...
Рейтинг: 0 / 0
хитро обновить таблицу с лимитом
    #38424169
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex564657498765453выдаёт ошибку - target table a of the UPDATE is not updateable
ок, давай так

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
set @current = 20;
UPDATE 
(select c.* from c where @current NOT IN (c.fk_p1,c.fk_p2,c.fk_p3) limit 10) a
join p on (c.fk_p1 = p.idp or c.fk_p2 = p.idp or c.fk_p3 = p.idp)

a.fk_p1=IF(a.fk_p1 = p.idp, @current, a.fk_p1)
a.fk_p2=IF(a.fk_p2 = p.idp, @current, a.fk_p2)
a.fk_p3=IF(a.fk_p3 = p.idp, @current, a.fk_p3)

where p.status = 0
...
Рейтинг: 0 / 0
хитро обновить таблицу с лимитом
    #38424283
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwerty112
Код: sql
1.
2.
3.
UPDATE 
(<skipped>) a
join p on (c.fk_p1 = p.idp or c.fk_p2 = p.idp or c.fk_p3 = p.idp)

не будет оно работать...
...
Рейтинг: 0 / 0
хитро обновить таблицу с лимитом
    #38424286
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglirqwerty112
Код: sql
1.
2.
3.
UPDATE 
(<skipped>) a
join p on (c.fk_p1 = p.idp or c.fk_p2 = p.idp or c.fk_p3 = p.idp)

не будет оно работать...
ну да, я заметил после того как отправил,
думаю ТС догадается и так, но нафсякей
Код: sql
1.
2.
3.
UPDATE 
(<skipped>) a
join p on (a.fk_p1 = p.idp or a.fk_p2 = p.idp or a.fk_p3 = p.idp)
...
Рейтинг: 0 / 0
хитро обновить таблицу с лимитом
    #38424339
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwerty112,

я уже догадался

Код: sql
1.
update target join (select * from target join.... where.... LIMIT 10)a on a.id=target.id
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / хитро обновить таблицу с лимитом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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