2013-03-04 57 views
0

我在MySQL数据库中的两个表如何检查当前用户是否已经喜欢或不喜欢的评论

  1. tbl_comments
  2. tbl_user_votes

有在tbl_user_votes三个字段

1. comment_id, 2. user_id, 3.vote_type ('L' OR 'D') (L for Like, D For Dislike) 

我有一个分页方案,根据我的每个网页有20个mments。每条评论都有一个喜欢和不喜欢按钮。当登录用户点击喜欢或不喜欢时,插入三个值tbl_users_votes, 1. comment_id, 2. user_id, 3. vote_type (L OR D).

我希望当页面重新载入时,所有评论他点击了“喜欢”或“不喜欢”,必须显示“你喜欢”或评论下的“你不喜欢”。

我的问题是,我不打算为这个问题做一个有效的算法。 我曾想过类似的解决方案。

我必须为每个评论运行一个SQL查询,例如"SELECT * From tbl_user_votes where comment_id = xyz and user_id = xyz",然后检查是否存在针对该user_id和comment_id的某个值。如果存在,那么我检查的价值和Put和如果这样

If(vote_found) 
    If(vote_type=='L') 
    echo "You Like" 
    else if(vote_type=='D') 
    echo "You Dislike' 

每个评论,但其他条件,我认为这是不是这样做的有效途径。它看起来非常内存和耗时的过程,就好像页面上有20条评论,每条评论对数据库的sql查询都非常昂贵。

任何人都可以有一些更好,更有效的方式来处理这个问题。

+0

1.获取所有帖子。 2.通过帖子,获取他们的ID。 3.获取所有选票'WHERE comment_id IN(...)'。 4.关联数据。 - 或者,你可以用* 1 *'LEFT JOIN'查询。 – deceze 2013-03-04 07:02:29

+0

我遇到了这个问题很多时间,我无法找到一个有效的解决方案。找到解决方案很容易,但并不容易。我想我们可以使用nosql DB来做这样的事情。有任何想法吗? – Tony 2013-06-19 19:36:34

回答

0

我建议你使用一个查询,它会给你一个记录集中的选票。

SELECT 
    tbl_comments.*, 
    tbl_users.* 
FROM 
    tbl_comments LEFT JOIN tbl_users 
    ON tbl_comments.user_id = tbl_users.user_id2 
WHERE 
    (tbl_users.user_id="xxx") 
    OR (tbl_users.user_id IS NULL); 

我不知道什么是你在tbl_users指数,所以我假定user_id2,如果需要改变它。

使用LEFT JOIN会为您提供该用户的所有评论,以及是否存在用户投票。如果tbl_comments.user_idNULL,那么没有评论。