MySQL Выберите по количеству + сумма значений - PullRequest
0 голосов
/ 11 марта 2011

У меня есть следующий запрос (Wordpress DB).

Это вернет данные для комментария, который имеет наиболее комбинированные оценки «вверх» и «вниз»:

$comment_query = $wpdb->get_results("
SELECT wp_comments.*, wp_comment_rating.*, (wp_comment_rating.ck_rating_up+wp_comment_rating.ck_rating_down) AS pop_comment 
FROM wp_comments, wp_comment_rating 
WHERE wp_comments.comment_post_ID = $post->ID 
AND wp_comments.comment_ID = wp_comment_rating.ck_comment_id 
AND wp_comments.comment_approved = 1 
ORDER BY pop_comment 
DESC 
LIMIT 1");

Однако я также хотел бы учесть комментарии, которые имеют наибольшее количество ответов, подсчитав количество подходящих «comment_parent» на комментарий, а затем добавив эту сумму к значению «pop_comment», которое я упорядочиваю.

По сути, я хочу получить данные для комментария с наиболее комбинированными ответами и оценками вверх / вниз.

Надеюсь, что это имеет смысл ...

Ответы [ 2 ]

0 голосов
/ 11 марта 2011

Это должно работать

По сути, это просто подзапрос, чтобы получить общее количество комментариев для comment_parent, а затем присоединить его как SubQ / SubCount к полю

comment_query = $wpdb->get_results(" 
SELECT wp_comments.*, wp_comment_rating.*, (SubCount + pop_comment) AS total_rank,    (wp_comment_rating.ck_rating_up+wp_comment_rating.ck_rating_down) AS pop_comment  
JOIN (SELECT COUNT(*) as SubCount, comment_parent as Sub_ID FROM wp_comments GROUP BY comment_parent) as SubQ
ON wp_comments.comment_ID = SubQ.Sub_ID
FROM wp_comments, wp_comment_rating  
WHERE wp_comments.comment_post_ID = $post->ID  
AND wp_comments.comment_ID = wp_comment_rating.ck_comment_id  
AND wp_comments.comment_approved = 1  ORDER BY total_rank  DESC  LIMIT 1"); 
0 голосов
/ 11 марта 2011

Вы можете выполнить подзапрос, чтобы получить счет по comment_parent

$comment_query = $wpdb->get_results("
SELECT wp_comments.*, wp_comment_rating.*, (wp_comment_rating.ck_rating_up+wp_comment_rating.ck_rating_down + (
    select count(*) from wp_comments c2 where c2.comment_parent=wp_comments.comment_ID
    )) AS pop_comment 
FROM wp_comments, wp_comment_rating 
WHERE wp_comments.comment_post_ID = $post->ID 
AND wp_comments.comment_ID = wp_comment_rating.ck_comment_id 
AND wp_comments.comment_approved = 1 
ORDER BY pop_comment 
DESC 
LIMIT 1");
...