2015-07-29 2 views
0

Мне нужен запрос MySQL, который оказывается намного сложнее, чем любой другой, который я когда-либо делал (я едва могу использовать самые простые запросы).MySQL-запрос, join (?) И столбец обновления

Итак, у меня есть 2 стола. У одного есть столбцы (пользователь, ранг), у другого есть (пользователь, голос). В среде PHP мне нужно обновить ранг пользователя в таблице1 на основе голосования, содержащегося в таблице2. Что-то вроде строк «Если пользователь проголосовал 1, добавьте +50 в свой ранг. Если пользователь проголосовал -1, добавьте -50 в свой ранг. Если пользователь проголосовал 2, добавьте +200 в свой ранг».

Я могу выполнить всю работу «if» на PHP, но мне действительно нужно иметь эффективный SQL-запрос для получения данных и управления рангом, потому что я уже заполнен плохо оптимизированными опросами в моем проекте.

Большое вам спасибо!

+0

Итак, существует прямая корреляция между голосами и рядами? Итак, зачем хранить ряды? – Strawberry

+0

, поскольку влияние голосования на ранг основано на нескольких разных факторах. –

+0

... не все из которых напрямую связаны с данными, уже сохраненными в таблице? – Strawberry

ответ

2

с помощью insert...select заявления в сочетании с ON DUPLICATE KEY UPDATE статьи, вы должны быть в состоянии сделать это на одном дыхании:

INSERT INTO userrank(user, rank) 
SELECT v.user, sum(v.vote) * 50 as rank 
FROM uservote v 
ON DUPLICATE KEY UPDATE rank = v.rank 

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

DELETE FROM userrank r 
WHERE NOT EXISTS (SELECT 'x' FROM uservote v WHERE v.user = r.user) 
+0

Спасибо большое! –

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