Php 按喜欢的数量列出评论
我试图让PHP通过减少他们收到的喜欢的数量来列出评论 目前,评论的内容和他们收到的喜欢的数量在两个单独的表格中:“评论”和“喜欢” PHP代码: 要从“注释”表中获取注释,请执行以下操作: 要从“喜欢”表中获得喜欢: 要显示每条评论的赞数,请执行以下操作:Php 按喜欢的数量列出评论,php,mysql,comments,facebook-like,Php,Mysql,Comments,Facebook Like,我试图让PHP通过减少他们收到的喜欢的数量来列出评论 目前,评论的内容和他们收到的喜欢的数量在两个单独的表格中:“评论”和“喜欢” PHP代码: 要从“注释”表中获取注释,请执行以下操作: 要从“喜欢”表中获得喜欢: 要显示每条评论的赞数,请执行以下操作: $query_like=$this->db->query("select ip from like where comment_id='$comment_id'"); $count_like=$query_like->num
$query_like=$this->db->query("select ip from like where comment_id='$comment_id'");
$count_like=$query_like->num_rows();
我想知道是否有可能在不改变表格结构的情况下,按照收到的喜欢的数量对评论进行排序。非常感谢您的建议。如果我正确理解了数据结构,您只需要一个
连接和一个聚合:
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;
编辑:
要获得零次向上投票的注释,请在另一个方向执行左外部联接
:
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;
使用外键innoDB
?谢谢。“选择c.*”是什么意思?尝试查找,但找不到结果。c
和l
是表别名。这些是表的较短名称,自联接和子查询(在许多数据库中)都需要这些名称。一般来说,它们还使查询更易于阅读。这意味着“从别名为c
的表中获取所有字段”。谢谢。我的理解是:我会从别名为C的表中选择所有字段,这是表“comments”,然后我用“like”连接这个表,在这里我得到字段,其中来自“like”的注释id等于“comments”中的注释id。然后,我会根据注释id对它们进行分组,并根据ip对它们进行排序。我的理解正确吗?还有,我怎么能按ip/like的数量订购呢?谢谢。@user3192948。通过说orderbycount(*)desc
或orderbynumlikes desc
(就像现在答案中的查询一样)。再次感谢。请原谅我问了一些愚蠢的问题。我尝试了以下操作:$data['comment']=“选择c.*,count()作为核元素,从'comment'c中加入'upvote'l on c.comment\u id=l.comment\u id按c.comment\u id按计数排序()desc;”;当我这样做的时候:打印($data['comment']);死亡它不显示查询的值,而是在“=”符号后显示整个文本。我没有正确输入mysql代码吗?
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;
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;