2014-01-25 53 views
0

我试图让PHP的下降,他们喜欢接受的数目,列出评论数评论。列表由喜欢

目前,该意见的内容和他们喜欢收到的数量是2个独立的表:‘意见’和‘喜欢’。

PHP代码:

从 “意见” 表得到的意见:

$this->db->order_by ('comment_id', 'asc'); 
$data['comment'] = $this->db->select()->get('comment'); 

为了得到喜欢 “喜欢” 表:

$data['like'] = $this->db->get('like'); 

为了表示喜欢的人数为每条评论:

$query_like=$this->db->query("select ip from like where comment_id='$comment_id'"); 
$count_like=$query_like->num_rows(); 

我想知道是否有可能通过他们收到的喜好数来排序评论而不改变表格的结构。任何意见非常赞赏。

+0

'innoDB'与国外'key'? –

回答

0

如果我理解正确的数据结构,你只需要一个join和聚合:

select c.*, count(*) as numlikes 
from comments c join 
    upvote l 
    on c.comment_id = l.comment_id 
group by c.comment_id 
order by count(*) desc; 

编辑:

零upvotes获得评论,不要在其他方向上的left outer join

SELECT c.*, count(u.comment_id) as num_upvotes 
FROM comment c left join 
    upvote u 
    on c.comment_id = u.comment_id 
WHERE c.comment_id = '$interview_id' 
GROUP BY c.comment_id 
ORDER BY num_upvotes DESC; 
+0

谢谢。 “选择c。*”是什么意思?试图查找它,但无法找到结果。 – user3192948

+0

'c'和'l'是表别名。这些是表的较短名称,对于自连接和子查询(在许多数据库中)是必需的。一般来说,它们也使查询更易于阅读。这意味着“使用别名'c'获取表中的所有字段”。 –

+0

谢谢。我的理解是这样的:我会从别名C中的表格,这是台“意见”,然后我加入这个表,选择所有字段“喜欢”,在这里我得到的领域,其中来自评论ID“喜欢”等于给“评论”中的评论ID。然后我会通过comment_id对它们进行分组,然后按ip排序。我的理解是否正确?而且,我怎么能通过ip/like的数量来排列呢?谢谢。 – user3192948