2016-11-19 2 views
2

у меня есть эти 2 таблицы ниже:Обновление одной таблицы MySQL со значениями из другой таблицы на основе матча ид

users: 
     id 7dexpn 
=========== ========== 
      1 0 
      2 0 
      3 0 


user_pages: 
     id  user_id 7dexpf 
========== =========== ========== 
     99   1 0 
     98   2 1 
     97   3 1 
     96   3 1 
     95   3 1 
     94   2 0 

Я пытаюсь вставить {user_pages совокупность (7dexpf) флагов} в таблице пользователей (7dexpn) согласование по user_pages (user_id) с таблицы пользователей (ID)

Ожидаемые результаты должны быть:

users: 
     id 7dexpn 
=========== ========== 
      1 0 
      2 1 
      3 3 

ответ

1

Вы хотите объединить значения в user_pages и затем назначить их. Я хотел бы сделать:

update users u join 
     (select user_id, count(*) as cnt 
     from user_pages 
     where `7dexpf` = 1 
     group by user_id 
     ) uu 
     on uu.user_id = u.id 
    set u.`7dexpn` = uu.cnt; 
+0

работает отлично, просто небольшая проблема ", если выше инструкция ложна, я хочу вернуть флаг возврата в 0, т. Е. [Установить u.'7dexpn' = uu.cnt; ELSE установлен u.'7dexpn' = 0;] он не работает для меня я надеюсь, что вы сможете решить эту проблему –

+0

@GoargeGo ... Вы должны задать дополнительные вопросы как новый вопрос, а не как комментарий. –

+0

ладно ,,,, здесь мы идем http://stackoverflow.com/questions/40993308/обновить один-MySQL-таблицы на основе значений-на-другое-по-ID-матч-с-условиях –

0

Вы можете использовать присоединиться к этому пути для агрегированного значения

update users u 
join ( select user_id, sum(case when `7dexpf` =1 1 else 0 end) tot_7dexpf 
     from user_pages 
     group by user_id) t1 on t1.user_id = u.id 
set u.`7dexpf` = t1tot_7dexpf 

И я предлагаю ИО ИЗБЕЖАТЬ столбцов имя, начинающееся с цифры или в этом случае используйте обратные кавычки, например:

`7dexpf` 
+0

я попытался это, но до сих пор не получают успеха –

+0

что tot_ 7dexpf и 1 еще 0 концов роль здесь ? я думаю, что что-то должно выглядеть так, как это обновление, пользователи и установили 7dexpn join (выберите user_id, sum (case, когда '7dexpf' = 1) tot_ 7dexpf из user_pagesgroup by user_id) t1 on t1.user_id = u.id –

+0

@ GoargeGo .. неправильное пространство между tot и 7 ... .. answer updated .. – scaisEdge

1

Попробуйте использовать ниже запрос

UPDATE users u, 
(
    SELECT 
     user_id, 
     SUM(7dexpf) AS 7dexpf 
    FROM 
     user_pages up 
    GROUP BY 
     user_id 
) upp 
SET 7dexpn = upp.7dexpf 
WHERE 
    u.id = upp.user_id 
+0

Я ищу обновить таблицу «users», пожалуйста, отредактируйте, поэтому я попробую –

+0

, но я все еще не работаю –

+0

Я обновляю свои ответы. Пожалуйста, попробуйте теперь надеяться, что это сработает. – Faisal

0

я сделал это успешно, делая как этот путь приветствиями к сообществу

$query=" UPDATE users c 
INNER JOIN (
    SELECT user_id, SUM(7dexpf) as total 
    FROM user_pages 
    GROUP BY user_id 
) x ON c.id = x.user_id 
SET c.7dexpn = x.total 
"; 
Смежные вопросы