Рассчитать количество плагинов для голосования вверх и вниз

0

В настоящее время у меня есть jQuery upvote Plugin в моем проекте. Таким образом, каждый раз, когда я нажимаю кнопку "вверх", он сохраняет значение в db как истинное, и каждый голос возвращается обратно, сохраняет значение как false в базе данных и сохраняет значение в другом столбце как 0. Все, что я пытался сделать, это чтобы подсчитать общее количество голосов, как и переполнение стека. Даже сейчас я так запутался в том, как решить эту проблему. Я в конечном итоге делаю этот код в php, что также замедляет работу всей моей программы:

$sample1 = $this->db->prepare("SELECT * from Ratings WHERE TopicID = :current");
$sample1->bindParam(':current', $id);
$sample1->execute();
$RES1 = $sample1->fetchAll(PDO::FETCH_ASSOC); 
$upVote = 0;

foreach ($RES1 as $mk){
     if(($mk['Upvote'] === 'true') && ($mk['Downvote'] ==='false')){
             $upVote++;
                                    }
     else if(( $mk['Upvote'] ==='false') && ($mk['Downvote'] === 'true')){
             $upVote--;
                                }
     else if(($mk['Upvote'] === 'false') && ($mk['Downvote'] === 'false')){
            $upVote--;
                                }
     else if(($mk['Downvote'] === 'false')){
             $upVote++;
                                }
     else if(($mk['Downvote'] === 'true') && ($mk['Upvote'] ==='0') || ($mk['Upvote'] === 'false')){
             $upVote--;
     }

 }

Моя структура таблицы: Изображение 174551

Для приведенного выше примера мой счетчик должен быть 0

  • 0
    Какие типы данных являются этими двумя столбцами? Почему бы просто не получить счет с помощью простого запроса SQL?
  • 0
    Пожалуйста, отредактируйте свой вопрос и покажите и пример ожидаемого результата, который вы ищете.
Показать ещё 8 комментариев
Теги:

1 ответ

1
Лучший ответ

Я думаю, что с небольшим количеством исследований условия, которые вы показываете, чтобы решить, вверх или вниз, могут быть упрощены. Но вот инструкция SQL, которая реализует ваши условия:

SELECT
    SUM(
        IF(Upvote='true' AND Downvote='false',1,
            IF(upvote='false' AND Downvote='true',-1,
                IF(Upvote='false' AND Downvote='false',-1,
                    IF(Downvote='false',1,
                        IF(Downvote='true' AND (Upvote='0' OR Upvote=false),-1,0)
                    )
                )
            )
        )) as 'votes'
FROM Ratings
WHERE TopicD = :current

Если считать только "истинные" значения, это может сделать трюк:

SELECT
    SUM(IF(Upvote='true',1,0)) - SUM(IF(Downvote='true',1,0)) as 'votes'
FROM Ratings
WHERE TopicD = :current

Ещё вопросы

Сообщество Overcoder
Наверх
Меню