2014-10-24 7 views
0

У меня есть таблица вроде этого:Обновить особое значение в таблице столбцов MySQL

id business_id path  photo 
1   11 1.jpg  0 
2   11 2.jpg  0 
3   15 1.jpg  0 
4   15 3.jpg  0 
5   15 4.jpg  0 
6   21 scan1.jpg 0 
7   21 scan2.jpg 0 
8   22 1.jpg  1 

....

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

Если фотография уже установлена ​​в 1 (как для business_id = 22), она не должна ее менять.

Я думаю, что ниже запрос будет работать на 1 business_id в то время:

Update business 
set photo = 1 
where id = 11 limit 1 

Но мой вопрос, как я могу запустить это в пакете? Поэтому я могу обновить все сразу.

+0

И, что один ??? – Strawberry

ответ

1

Вы могли бы попробовать этот запрос:

UPDATE business SET photo = 1 WHERE id IN 
    (SELECT MIN(id) , MAX(photo) FROM business 
    GROUP BY business_id HAVING max(photo) = 0) 

Дополнительной информацию: Следующий запрос дает вам список строк, где бизнес не имеет какое-либо фото. Этот запрос был отправной точкой для моего ответа.

SELECT business_id , MAX(photo) FROM business 
GROUP BY business_id HAVING max(photo) = 0 
+0

Это приведет к установке второй фотографии в 1 для идентификатора, который уже имел значение 1. –

+0

Этого не должно было быть. Я пропускаю строки, где 'business.photo' уже имеет 1 с этим предложением' HAVING max (фото) = 0' – JCalcines

+0

Да, я просто проверяю его и работает правильно. – JCalcines

1

Вы можете обновить таблицу, используя ниже запроса, он будет получить максимум для каждого business_id который имеет все фотографии, установленные на 0 и используя присоединиться к вам к югу выберите обновит одну запись в business_id на фото = 1

update business b 
join (select max(id) id, business_id 
from business 
group by business_id 
having sum(photo = 0) = count(*)) t 
on(b.id = t.id) 
set b.photo = 1 

DEMO

+0

Это было бы правильно, если count() были изменены на 0, так как я понимаю вопрос, он хочет 1 фото = 1 для каждого отдельного идентификатора. –

+0

@JoeMurray - Не могли бы вы рассказать, какую часть запроса изменить? – NoviceMe

+0

@JoeMurray см. Демонстрационную часть ответа, также 'sum (photo = 0) = count (*)' будет гарантировать, что результирующая 'business_id' будет иметь все фотографии, установленные на 0, и обновляющая часть обновит только 1 строку на 'business_id 'с фото = 1 –

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