вложенный запрос

alex77

Новичок
вложенный запрос

Здравствуйте.

есть таблица area с полями pid, aid, mid, position:

+------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------------------+------+-----+---------+----------------+
| pid | bigint(20) unsigned | | | 0 | |
| aid | int(10) unsigned | | | 0 | |
| mid | int(10) unsigned | | | 0 | |
| position | int(10) unsigned | | | 0 | |
+------------+---------------------+------+-----+---------+----------------+


mysql 4.0.12-nt

как сделать такой запрос:

уменьшить на 1 все position если position > чем position у mid = 4 и при этом у них одинаковые pid и aid.

делал так, но не работает (
update area a set position = position - 1 where position > (select position from area where mid = 4 and a.pid = pid and a.aid = aid);
 

fixxxer

К.О.
Партнер клуба
а, блин. невнимательно читал.
а что мешает выбрать заранее нужные значения и использовать обычный where?

-~{}~ 27.06.06 13:58:

ну или объясни попонятнее, где "у них", может я недопонял
 

alex77

Новичок
а что мешает выбрать заранее нужные значения
если их будет оч. много, то по всем по ним придется пройтись в цикле?
или сразу все, через OR поместить в один запрос ?

"у них"- я имел в виду что строки, у которых надо уменьшить position должны иметь такой же pid и aid, как у строки с mid=4
 

fixxxer

К.О.
Партнер клуба
"чем position у mid = 4 и при этом у них одинаковые pid и aid" - откуда тогда "очень много"?

в общем, реальную задачу скажи, не надо выдумывать :)
если же mid не уникален, тогда все же поясни про "у них".
 

grigory soid

Новичок
Какой-то запрос у тебя стрынный. Во первых имхо первую часть надо писать так:
update area a set a.position = a.position - 1 where a.position > ...

Во второй части попробуй поставить LIMIT 1
 
Сверху