2017-08-13 8 views
0
CREATE TABLE post_likes (
     post_id    INT NOT NULL, 
     user_id    INT NOT NULL, 
     likes     BOOLEAN NOT NULL,   
     FOREIGN KEY   (post_id) REFERENCES posts(id), 
     FOREIGN KEY   (user_id) REFERENCES users(id), 
     PRIMARY KEY   (user_id, post_id) 
    ) 


    +-------+---------+---------+ 
    | likes | post_id | user_id | 
    +-------+---------+---------+ 
    |  1 |  1 |  1 | 
    |  1 |  1 |  2 | 
    |  0 |  2 |  1 | 
    |  0 |  2 |  2 | 
    +-------+---------+---------+ 

私はNodeJSとEJSをテンプレート言語として使用しています。今私はEJSにpost_likesテーブルを渡しています。そしてforループをやろうとしています。基本的に表1 =真または似て0 =偽または嫌い。だから私はカウンターを持っていて、それが好きなら私はカウンターをやる++ else counter - 。しかし、それは悪く見えます。また、何らかの理由で動作していないこれを行うためのより良い方法は何ですか。好き嫌いを表示するにはどうすればいいですか?MySQL、NodeJS

私が試したこと - 不要なコードの他の部分は除外しました。私はejsの閉じ括弧を削除し、読みやすくするために開いています。

<% var counter = 0 %> 

for(var i = posts.length-1; i >= 0; i--) { 
    if(posts[i].post_likes.length > 0) { 
     for(var j = 0; j < posts[i].post_likes.length; j++) { 
      if(posts[i].post_likes[j].likes == true) { 
       counter = counter + 1 %> 
      } 
      else if(posts[i].post_likes[j].likes == false) { 
       counter = counter - 1 
      } 
     } 
    } 
} 

<h1><%= counter %></h1> 

答えて

0

あなたはこのようなことをして、好き嫌いのある投稿の合計を得ることができます。

var posts = [{ 
    post_likes: [{ 
     likes: true 
    }] 
}, { 
    post_likes: [{ 
     likes: true 
    }] 
}, { 
    post_likes: [{ 
     likes: false 
    }] 
}, { 
    post_likes: [{ 
     likes: true 
    }] 
}]; 

var likedPosts = 0; 
var unlikedPosts = 0; 

posts.forEach(function(post) { 
    likedPosts += post.post_likes.filter(function(v) { 
     return v.likes === true; 
    }).length; 

    unlikedPosts += post.post_likes.filter(function(v) { 
     return v.likes === false; 
    }).length; 
}); 

console.log('Liked posts: ' + likedPosts); 
console.log('Unliked posts: ' + unlikedPosts); 
関連する問題