2014-01-25 54 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