2013-11-17 4 views
0

У меня есть следующий запрос, и я хотел бы сделать это так, если есть дубликат ключа он обновляет значенияОбновление таблицы MySQL с данными из нескольких таблиц

INSERT INTO totalData (pageId, dateScanned, totalPageLikes, totalTalkingAbout, totalPos, totalNeg, totalFemales, totalMales, totalStrongPositives, totalPositives, totalWeakPositives, totalNeutrals, totalWeakNegatives, totalNegatives, totalStrongNegatives, totalStatuses, totalStatusLikes, totalStatusShares, totalComments, totalUniqueCommenters) 

SELECT pages.pageId, pages.dateScanned, pages.likes, pages.talkingAbout, 

SUM(commentTags.tag LIKE '%positive%') AS positive, 
SUM(commentTags.tag LIKE '%negative%') AS negative, 

SUM(comments.gender = 'female')   AS females, 
SUM(comments.gender = 'male')   AS males, 

SUM(commentTags.tag = 'strong_positive') AS strongPositives, 
SUM(commentTags.tag = 'positive') AS positives, 
SUM(commentTags.tag = 'weak_positive') AS weakPositives, 
SUM(commentTags.tag = 'neutral')   AS neutrals, 
SUM(commentTags.tag = 'weak_negative') AS weakNegatives, 
SUM(commentTags.tag = 'negative') AS negatives, 
SUM(commentTags.tag = 'strong_negative') AS strongNegatives, 

COUNT(DISTINCT statuses.statusId) AS totalStatuses, 
SUM(DISTINCT statuses.likesCount) AS totalLikesCount, 
SUM(DISTINCT statuses.sharesCount)  AS totalSharesCount, 
COUNT(DISTINCT comments.commentId) AS totalComments, 
COUNT(DISTINCT comments.userName)  AS uniqueUsers 

FROM pages 
JOIN statuses ON pages.pageId = statuses.pageId AND pages.dateScanned = statuses.dateScanned 
JOIN comments ON comments.statusID = statuses.statusId 
JOIN commentTags ON comments.commentId = commentTags.commentId 

WHERE pages.pageId = '115798033817' AND pages.dateScanned = '2013-11-05' 

Я попытался ON DUPLICATE KEY UPDATE и это, как я дальше модифицирована в запросе

ON DUPLICATE KEY UPDATE 
totalData.pageId = pageId, totalData.dateScanned = dateScanned, 
totalData.totalPageLikes = totalPageLikes, totalData.totalTalkingAbout = totalTalkingAbout, 
totalData.totalPos = positive, totalData.totalNeg = negative, totalData.totalFemales = females, 
totalData.totalMales = males, totalData.totalStrongPositives = strongPositives, 
totalData.totalPositives = positives, totalData.totalWeakPositives = weakPositives, 
totalData.totalNeutrals = neutrals, totalData.totalWeakNegatives = weakNegatives, 
totalData.totalNegatives = negatives, totalData.totalStrongNegatives = strongNegatives, 
totalData.totalStatuses = totalStatuses, totalData.totalStatusLikes = totalLikesCount, 
totalData.totalStatusShares = totalSharesCount, totalData.totalComments = totalComments, 
totalData.totalUniqueCommenters = uniqueUsers ; 

Но когда я запускаю запрос он говорит Unknown column 'positive' в списке полей.

+0

И ваша проблема ..? – Babblo

+0

В конце моего сообщения ... «Но когда я запускаю запрос, он говорит« Неизвестный столбец »в списке полей». ... Как это исправить? – Haseeb

+0

Сообщение об ошибке очень ясно .. «положительный» столбец не существует. – Babblo

ответ

0

Понял, я должен был использовать функцию VALUES() так ON DUPLICATE KEY UPDATE часть запроса становится как следующий

ON DUPLICATE KEY UPDATE 
         totalPageLikes = VALUES(totalPageLikes), totalTalkingAbout = VALUES(totalTalkingAbout), 
         totalPos = VALUES(totalPos), totalNeg = VALUES(totalNeg), totalFemales = VALUES(totalFemales), totalMales = VALUES(totalMales), 
         totalStrongPositives = VALUES(totalStrongPositives), totalPositives = VALUES(totalPositives), totalWeakPositives = VALUES(totalWeakPositives), 
         totalNeutrals = VALUES(totalNeutrals), totalWeakNegatives = VALUES(totalWeakNegatives), totalNegatives = VALUES(totalNegatives), totalStrongNegatives = VALUES(totalStrongNegatives), 
         totalStatuses = VALUES(totalStatuses), totalStatusLikes = VALUES(totalStatusLikes), totalStatusShares = VALUES(totalStatusShares), 
         totalComments = VALUES(totalComments), totalUniqueCommenters = VALUES(totalUniqueCommenters) "; 
Смежные вопросы