2014-11-08 4 views
0

В моей базе данных Mysql, у меня есть таблица данных, как показано нижеусловно строка обновления на основе другого результата обновления

id | id_fk | name | address | city | priority | status | 
-------------------------------------------------------------- 
1 | 1  | name1 | address1 | city1 |   | active | 
2 | 2  | name2 | address2 | city2 | primary | active | 
3 | 1  | name3 | address3 | city3 | primary | active | 
4 | 1  | name4 | address4 | city4 |   | active | 
5 | 1  | name5 | address5 | city5 |   | active | 
6 | 3  | name6 | address6 | city6 | primary | active | 
-------------------------------------------------------------- 

Здесь id является строка идентификатора, id_fk является ссылкой из другой таблицы. status - состояние данных. Если данные будут удалены, то это будет deleted. и priority для ссылки на адрес по умолчанию.

Моя проблема в том,

Если удалить адрес с id = 3, то там не будет первым приоритетом адрес «id_fk = 1». Я хотел бы изменить статус «id = 3» как deleted и установить priority любого другого адреса с «id_fk = 1» как primary.

Простой UPDATE запрос этого не сделает. Есть ли способ сделать это? Заранее спасибо.

+0

Я пытался сделать это с помощью тематического, когда заявления и если заявление, но не :(А пока лучшего ответ смогу дать вам просто сделать это, используя 2 запроса обновления (если первый изменил строку, обновил еще одну строку до состояния «первичный») – iLot

ответ

1

Существует способ сделать это с помощью двух UPDATE запросов:

UPDATE myTable SET status = 'deleted' WHERE id = 3 
; 
UPDATE myTable as a, 
(SELECT id_fk, max(id) 
    FROM myTable 
    WHERE id_fk = 1 
    AND status NOT IN ('deleted') 
    GROUP BY id_fk 
) as b 
SET a.priority = 'primary' 
WHERE a.id_fk = 1 
AND a.id = b.id 
+0

Несколько раз вы путали приоритет и статус. Должно быть «SET status =» удалено 'и 'И status NOT IN (' deleted ')' (или 'AND status! =' deleted''). Кроме этого, я думаю, что это должен быть ответ; – iLot

+1

Yepp, вы правы. nks для комментария, я обновил свой ответ. – Benvorth

Смежные вопросы