Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 按喜欢的数量列出评论_Php_Mysql_Comments_Facebook Like - Fatal编程技术网

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

我试图让PHP通过减少他们收到的喜欢的数量来列出评论

目前,评论的内容和他们收到的喜欢的数量在两个单独的表格中:“评论”和“喜欢”

PHP代码:

要从“注释”表中获取注释,请执行以下操作:

要从“喜欢”表中获得喜欢:

要显示每条评论的赞数,请执行以下操作:

$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;