|
|
|
| Проблема в следующем:
Надо проапдейтить таблицу одну колонку таблицы, отбирая только те строки, которые совпадают со второй таблицей.
Если по-русски :) то это выглядит так:
UPDATE LOW_PRIORITY shopmap_positions SET position=(position+1)
WHERE (
(position>=1) AND (position<$currPos)
AND
(id IN (SELECT id FROM shopmap WHERE parent_id=$parentId))
)
|
Главная таблица shopmap. Вспомогательная таблица shopmap_positions - поле id у обеих таблиц содержит одинаковые значения (по этому полю они и объединяются).
$currPos и $parentId - понятно, что подставляемые из PHP переменные. Числа. Для конкретики сейчас они имеют значения 2 и 10 соответственно.
Мне надо изменить значение поля position для записей с такими id, у которых в главной таблице поле parent_id имеет строго определенное значение.
Запрос ругается у меня на
You have an error in your SQL syntax near 'SELECT id FROM shopmap WHERE parent_id=10)) ) ' at line 7
Куда копать, господа знатоки?? :) | |
|
|
|
|
|
|
|
для: LouD
(28.12.2007 в 12:42)
| | Если я просто указываю список, примерно так:
UPDATE LOW_PRIORITY shopmap_positions SET position=(position+1)
WHERE (
(position>=1) AND (position<$currPos)
AND
(id IN (11, 15, 23))
)
|
то все проходит отлично.
Но не хотелось бы отдельно формировать строку-перечень в PHP, организовывать цикл.. Однозначно чувствую, что MySQL имеет встроенные стредства для таких операций, вот только найти не могу :( | |
|
|
|
|
|
|
|
для: LouD
(28.12.2007 в 12:42)
| | Коллеги, а не может быть причина вот в такой строке "Версия сервера: 3.23.53-max" ???
Никто не подскажет, с какой версии подзапросы мускул принимает??
А то я уже накрутил еще доп.условий:
UPDATE LOW_PRIORITY shopmap_positions SET position=(position+1)
WHERE ( (shopmap_positions.id IN (SELECT
HIGH PRIORITY shopmap.id FROM
shopmap WHERE shopmap.parent_id=10 FOR
UPDATE)) AND (position>=1) AND
(position<2) )
|
а может, просто версии не хватает?
P.S. Вообще у меня создается ощущение, что я разговариваю сам с собой тут... :)))) | |
|
|
|
|
|
|
|
для: LouD
(28.12.2007 в 13:42)
| | ну что - сам себе отвечу:
> Version 4.1 of the MySQL server includes many enhancements and new features:
> * Subqueries and derived tables (unnamed views). See Section 12.2.8, “Subquery Syntax” (http://dev.mysql.com/doc/refman/4.1/en/subqueries.html)
Вот и поговорили! :)
Итого резюме, как я понимаю:
- тему можно закрывать
- проблема лишь в старой версии мускула, синтаксис запроса правильный. | |
|
|
|
|
|
|
|
для: LouD
(28.12.2007 в 13:42)
| | >Версия сервера: 3.23.53-max
:)) | |
|
|
|
|
|
|
|
для: Trianon
(29.12.2007 в 04:17)
| | Ну и ладно прикалываться! :))))
Зато обновился вот - повод появился наконец! ;) | |
|
|
|