2014-10-31 5 views
0

Я делаю приложение, в котором вы можете проголосовать, у меня есть таблица, содержащая «рейтинг», которая идет от 0 до 100 и содержит также «голосов», что представляет собой количество голосов. Я использую:Операция «IF» MySQL

UPDATE maincategory SET rating='75'/votes 

Но когда никто еще не проголосовал, голоса, очевидно, «0». И это делает «75/0» (раздел с «0»). Как я могу сделать оператор «If» или что-то еще, что проверяет, есть ли у этой вещи «0» голосов и не делятся на «голоса» (потому что они «0»)?

Заранее спасибо

EDIT: Моя логика голосование не имеет особого смысла, я видел это сейчас ... К сожалению, то, что я должен сделать, чтобы исправить это? Может быть, добавить все оценки вместе и разделить с количеством голосов?

+0

Хотели бы вы, чтобы рейтинг был '75', когда есть 0 голосов? – Overv

+0

Да, это было бы здорово. – Fusseldieb

+0

@Fusseldieb Почему это здорово? Почему что-то начинается с 75%? – ceejayoz

ответ

1

Просто запустите его на строках с голосами.

UPDATE maincategory SET rating='75'/votes WHERE votes>0 

Оставьте остальные на дефолте 0 или NULL рейтинга и ручки, что в вашем приложении.

Кроме того, бит '75'/votes звучит немного от меня. С одним голосом он будет иметь рейтинг 75. С двумя голосами он будет иметь рейтинг 37,5. Голосов обычно не было бы уменьшение a рейтинг.

Как правило, новый рейтинг должен быть установлен таким образом (это псевдокод, не действует SQL):

rating = ((current_rating * current_vote_count) + new_rating)/(current_vote_count + 1) 
+0

Но ваш код только выполняет голосование, когда он больше, чем 0 голосов ... Я хочу, чтобы первый человек тоже мог оценить. – Fusseldieb

+0

@Fusseldieb Ваша рейтинговая логика не имеет большого смысла. – ceejayoz

+0

«Голоса обычно не уменьшали рейтинг» ... О, ошибка на моей стороне »-« – Fusseldieb

1

Если вы хотите рейтинг, чтобы быть 75 если есть 0 голосов, вы можете использовать:

UPDATE maincategory SET rating=75/MAX(1,votes) 

Это будет гарантировать, что всегда есть по крайней мере один «голос», чтобы разделить на. В основном это заставляет оценивать 0 голосов так же, как и 1 случай с правом голоса.

+0

Отлично, но я понял, что у меня есть ошибка на моей стороне. Как я могу суммировать все рейтинги и делиться на количество голосов? – Fusseldieb

0

Чтобы предложить третий ответ, используя саз (эквивалент IF):

UPDATE maincategory SET rating= CASE WHEN votes=0 THEN 0 ELSE '75'/votes END 

Это установит значение rating до 0, когда votes является 0

в операторе IF:

UPDATE maincategory SET rating= if(votes=0, 0,'75'/votes) 
+0

Извините, ошибка на моей стороне. Как я могу добавить все рейтинги вместе и разделить на количество голосов? – Fusseldieb

+0

Вы хотите, чтобы все «рейтинг» в таблице «maincategory» имели одинаковое значение? – JNevill

+0

Вы действительно хотите сохранить это значение. Не могли бы вы просто «ВЫБЕРИТЬ ЦЕЛЬ (Рейтинг)/Сумма (Голосов) ОТ maincategory' Не имеет смысла хранить эти результаты в той же таблице. – JNevill

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