|
|
|
| Не работает вот такой запрос:
UPDATE modx_site_content SET id=27 WHERE id IN
(SELECT modx_site_content.id
FROM modx_site_content, modx_site_tmplvar_contentvalues
WHERE parent =12
AND deleted =0
AND published =1
AND tmplvarid =6
AND contentid = modx_site_content.id
ORDER BY modx_site_content.id
LIMIT 5,30
)
|
говорит: #1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
Однако же, если UPDATE меняю на SELECT - все работает. Ладно, выкинул пока LIMIT :
UPDATE modx_site_content SET id=27 WHERE id IN
(SELECT modx_site_content.id
FROM modx_site_content, modx_site_tmplvar_contentvalues
WHERE parent =12
AND deleted =0
AND published =1
AND tmplvarid =6
AND contentid = modx_site_content.id
ORDER BY modx_site_content.id
)
|
говорит: #1093 - You can't specify target table 'modx_site_content' for update in FROM clause
Как я понимаю, ругается на то, что обновляемая таблица присутствует и во вложенном запросе. Подскажите, плиз, варианты выполнения такого запроса. | |
|
|
|
|
|
|
|
для: denvor
(27.08.2008 в 15:05)
| | может меня товарищи поправят, но update не может быть в одной конструкции с select. | |
|
|
|
|
|
|
|
для: denvor
(27.08.2008 в 15:05)
| | по-моему, Вы пытаетесь изменить первичный ключ (помимо того, что это связующее таблицы поле ). | |
|
|
|
|
|
|
|
для: Trianon
(27.08.2008 в 15:54)
| | С первичным ключом - это опечатка, обновляется другое поле
UPDATE modx_site_content
SET parent = '27'
WHERE id IN
(SELECT modx_site_content.id
FROM modx_site_content, modx_site_tmplvar_contentvalues
WHERE parent =12
AND deleted =0
AND published =1
AND tmplvarid =6
AND contentid = modx_site_content.id
ORDER BY modx_site_content.id
LIMIT 5,10)
|
А вот насчет SELECT в UPDATE действительно хотелось бы услышать :) В книге написано, что внутренним запросом может быт только SELECT , а внешним - все (включая UPDATE )... Копаем... | |
|
|
|
|
|
|
|
для: denvor
(27.08.2008 в 17:54)
| | и что означает ORDER и LIMIT во внутреннем запросе?
ORDER и LIMIT воздействуют на формирование набора результата (для SELECT)
Здесь же SELECT никакой результат не порождает. | |
|
|
|
|
|
|
|
для: Trianon
(27.08.2008 в 18:02)
| | Остальное я бы написал через соединение
UPDATE modx_site_content
FROM modx_site_content
JOIN modx_site_tmplvar_contentvalues ON contentid = modx_site_content.id
SET parent = '27'
WHERE parent =12
AND deleted =0
AND published =1
AND tmplvarid =6
|
| |
|
|
|
|
|
|
|
для: Trianon
(27.08.2008 в 18:02)
| | SELECT во внутреннем запросе выдает список id. Для их сортировки и отсечения нужного диапазона и применяю SORT и LIMIT
UPDATE ... FROM наверное не совсем верно
выдает #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM modx_site_content
JOIN modx_site_tmplvar_contentvalues ON contentid =' at line 2 | |
|
|
|
|
|
|
|
для: denvor
(27.08.2008 в 19:45)
| | >SELECT во внутреннем запросе выдает список id. Для их сортировки и отсечения нужного диапазона
и применяю SORT и LIMIT
Для этого применяется AND modx_site_content.id BETWEEN 5 AND 24 в разделе WHERE
>UPDATE ... FROM наверное не совсем верно
Какая версия сервера?
Впрочем, да. Это я с DELETE перепутал
UPDATE modx_site_content
JOIN modx_site_tmplvar_contentvalues
ON
и далее по тексту | |
|
|
|
|
|
|
|
для: Trianon
(27.08.2008 в 20:02)
| | Версия MySQL - 5 с копейками.
Вот примерно такого совета я и ожидал :) (с JOIN не работал пока) - завтра попробую и доложу. Спасибо! | |
|
|
|