MvKozyrev
Постоялец
- Регистрация
- 5 Май 2007
- Сообщения
- 128
- Реакции
- 74
- Автор темы
- #1
Делаю плагин к wpmu, который будет выводить самые комментируемые посты за день.
Проблема в том, что данные о "постах за день" и "количестве комментов" хранятся в разных таблицах. И выбор из первой таблицы предполагает сортировку по времени написания поста. А второй запрос уже выполняется внутри первого и сортировка получается сначала по по времени, а потом уже по комментам. Искал в Нете - либо пишут, что никак, либо советуют забивать первую выборку в массив и извлекать .js'ом.
Посоветуйте, как сделать эту чертову сортировку by comment_count. :bc:
Проблема в том, что данные о "постах за день" и "количестве комментов" хранятся в разных таблицах. И выбор из первой таблицы предполагает сортировку по времени написания поста. А второй запрос уже выполняется внутри первого и сортировка получается сначала по по времени, а потом уже по комментам. Искал в Нете - либо пишут, что никак, либо советуют забивать первую выборку в массив и извлекать .js'ом.
Посоветуйте, как сделать эту чертову сортировку by comment_count. :bc:
PHP:
<?php
function display_content_of_most_commented_posts_from_all_blogs($how_many = 10) {
global $wpdb, $wpmuBaseTablePrefix;
$counter = 0;
// get a list of blogs in order of most recent update
$blogs = $wpdb->get_col("SELECT blog_id FROM $wpdb->blogs WHERE
last_updated >= DATE_SUB(CURRENT_DATE(), INTERVAL 10 DAY)
AND archived = '0'
AND mature = '0'
AND spam = '0'
AND public = '1'
AND deleted = '0'
");
//с**а! Сортирует по дате создания поста
if( is_array( $blogs ) ) {
foreach ($blogs as $blog) {
// we need _posts and _options tables for this to work
$blogOptionsTable = $wpmuBaseTablePrefix.$blog."_options";
$blogPostsTable = $wpmuBaseTablePrefix.$blog."_posts";
$options = $wpdb->get_results("SELECT option_value FROM
$blogOptionsTable WHERE option_name IN ('siteurl','blogname')
ORDER BY option_name DESC");
// we fetch the title and link for the latest post
$thispost = $wpdb->get_results("SELECT post_title, post_date, post_content, post_password, comment_count, post_author, guid
FROM $blogPostsTable WHERE
post_status = 'publish'
AND post_type = 'post'
AND comment_count > '0'
ORDER BY comment_count DESC");
//Вот здесь, по идее, должна выполняться сортировка по количеству комментов, но мать его - только во вторую очередь.
// comments
$count = $thispost[0]->comment_count;
// if it is found put it to the output
if(($thispost) && empty($thispost[0]->post_password)){
$content = $thispost[0]->post_content;
$content = apply_filters('the_content', $content);
$content = str_replace(']]>', ']]>', $content);
$content = strip_tags($content);
$excerpt_length = 30;
$words = explode(' ', $content, $excerpt_length + 1);
if (count($words) > $excerpt_length) {
array_pop($words);
array_push($words, '[...]');
$content = implode(' ', $words);
}
echo $thispost[0]->post_password;
echo '<div class="entry">';
echo '<h3 class="entrytitle"><a href="'.$thispost[0]->guid.'">'.$thispost[0]->post_title.'</a></h3>';
echo '<small>'.$thispost[0]->post_date.'</small><br />';
echo '<strong>Блог:</strong> <a href="'.$options[0]->option_value.'">'.$options[1]->option_value.'</a>';
echo '<div class="entrybody">'.$content.'</div>';
echo '<p>'
. '<a href="'.$thispost[0]->guid.'">читать полностью</a> | '
. '<a href="'.$thispost[0]->guid.'#comments">комментарии</a> ('.$count.') | ';
echo 'Перейти на <a href="'.$options[0]->option_value.'"> '.$options[1]->option_value.'</a></div><hr />';
$counter++;
}
// don't go over the limit
if($counter >= $how_many) {
break;
}
}
}
}
?>