2014-01-25 5 views
0

Я пытаюсь заставить PHP перечислить комментарии по убыванию числа понравившихся им получателей.Список комментариев по количеству понравившихся

В настоящее время содержание комментариев и количество понравившихся им получателей находятся в двух отдельных таблицах: «комментарии» и «нравится».

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' с' иностранным ключом'? –

ответ

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; 

EDIT:

Чтобы получить комментарии с нулевым 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

Спасибо. Что означает «select c. *»? Пытался найти его, но не смог найти результаты. – user3192948

+0

'c' и' l' являются псевдонимами в таблице. Это короткие имена для таблиц и требуются для самостоятельных подключений и для подзапросов (во многих базах данных). В общем, они также упрощают чтение запросов. Это означает «получить все поля из таблицы с псевдонимом« c ». –

+0

Спасибо. Мое понимание таково: я бы выбрал все поля из таблицы с псевдонимом C, который представляет собой «комментарии» таблицы, затем я присоединяюсь к этой таблице с «like», где я получаю поля, где идентификатор комментария от «like» равен comment id в комментариях. Тогда я бы сгруппировал их с помощью comment_id и упорядочил ip для. Правильно ли я понимаю? И, как я могу заказать их по числу ip/like? Благодарю. – user3192948

Смежные вопросы