Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ребята, подскажите с условием для UPDATE запроса 
V
    Опции темы
maxipub
Дата 20.11.2014, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Добрый день!

Есть табличка: id (int uniq), parent_id (int), cat_id (int).

parent_id содержит родительский id - для дочерних элементов; для "родителей" parent_id дублирует значение id.

Необходимо сделать UPDATE таблицы для строк с cat_id=123. При этом апдейтится должны все связанные по parent_id элементы.

Т.е. если есть строка

id, parent_id, cat_id
1, 1, 123
2, 2, 777
3, 2, 123

То условие должно влиять на все представленные записи:

id=1 содержит cat_id=123
id=2 НЕ содержит cat_id=123, но на него по parent_id ссылается id=3
id=3 содержит cat_id=123

Пока получается решить задачу только с php циклом и кучей запросов, но понимаю что это неправильный подход.

Заранее огромное спасибо за помощь и любые подсказки!
PM MAIL   Вверх
Akina
Дата 20.11.2014, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Какой уровень вложенности ссылок?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
maxipub
Дата 20.11.2014, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Блин, ну вы меня напугали! smile "Два часа искал свой Айфон. Потом вспомнил: у меня нет Айфона..." smile 

Один уровень вложенности - есть родительский и дочерние элементы; последние родителями быть не могут.
PM MAIL   Вверх
Akina
Дата 20.11.2014, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Ну тады какие сложности?

Код

SELECT t1.*
FROM table t1
LEFT JOIN table t2 
ON t1.id = t2.parent_id AND t2.cat_id = 123
WHERE t2.cat_id = 123 OR t1.cat_id = 123



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
maxipub
Дата 20.11.2014, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Akina, не знаю, после 15 я начинаю вообще тупить.  smile  А как это можно к UPDATE привязать? smile 
PM MAIL   Вверх
Akina
Дата 20.11.2014, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(maxipub @  20.11.2014,  18:02 Найти цитируемый пост)
после 15 я начинаю вообще тупить

Да, а сегодня уже 20-е... понимаю.
Код

UPDATE table t1 
LEFT JOIN table t2  
ON t1.id = t2.parent_id AND t2.cat_id = 123 
SET t1.field1 = value1, t1.field2 = value2 -- , ...
WHERE t2.cat_id = 123 OR t1.cat_id = 123 





--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
maxipub
Дата 20.11.2014, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Akina, я имею в виду 15 часов дня. smile 

UPDATE LEFT JOIN первый раз в жизни такое вижу smile Блин, век живешь - век учишь. Моя благодарность, буду пробовать! smile 
PM MAIL   Вверх
Akina
Дата 20.11.2014, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(http://dev.mysql.com/doc/refman/5.6/en/update.html)

Multiple-table syntax: 
Код

UPDATE [LOW_PRIORITY] [IGNORE] table_references
    SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...
    [WHERE where_condition]

[skipped]

table_references and where_condition are specified as described in Section 13.2.9, “SELECT Syntax”.






--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0527 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.