MySQL - пропустить повторяющиеся записи WordPress - PullRequest
1 голос
/ 20 ноября 2008

Я пишу скрипт для отображения 10 самых «активных» постов в блоге WordPress (т. Е. С последними комментариями). Проблема в том, что в списке много дубликатов. Я хотел бы отсеять дубликаты. Есть ли простой способ сделать это, изменив запрос MySQL (например, IGNORE, WHERE) или каким-либо другим способом? Вот что у меня есть:

<?php

function cd_recently_active() {
    global $wpdb, $comments, $comment;
    $number = 10; //how many recently active posts to display? enter here

if ( !$comments = wp_cache_get( 'recent_comments', 'widget' ) ) {
    $comments = $wpdb->get_results("SELECT comment_date, comment_author, comment_author_url, comment_ID, comment_post_ID, comment_content FROM $wpdb->comments WHERE comment_approved = '1' ORDER BY comment_date_gmt DESC LIMIT $number");

    wp_cache_add( 'recent_comments', $comments, 'widget' );
}
?>

Ответы [ 2 ]

3 голосов
/ 20 ноября 2008

Посмотрите на параметр DISTINCT для оператора SELECT. Или в качестве альтернативы синтаксис GROUP BY (посмотрите на ту же ссылку). Хотя они работают по-разному, эти два метода, скорее всего, помогут вам получить именно то, что вы хотите.

0 голосов
/ 21 ноября 2008

Я думал, что понял это с помощью GROUP BY, но теперь я не уверен. Вот код:

    if ( !$comments = wp_cache_get( 'recent_comments', 'widget' ) ) {
    $comments = $wpdb->get_results("SELECT comment_post_ID, comment_author, comment_date FROM $wpdb->comments WHERE comment_approved = '1' GROUP BY comment_post_ID ORDER BY comment_date_gmt DESC LIMIT $number");
    wp_cache_add( 'recent_comments', $comments, 'widget' );
}

Единственное изменение заключается в добавлении GROUP BY comment_post_ID (поле, которое я хотел, чтобы оно было уникальным). К сожалению, это «нарушает» функцию; он заморожен и не обновляется.

Я также не мог заставить DISTINCT работать. Один комментарий, за которым я следую, чтобы выяснить это, пришел от http://www.webmasterworld.com/forum88/9204.htm

В частности, комментарий №: 1259236 от ergophobe говорит: «Вы не указали GROUP BY. Без этого вы получите несколько результатов для данного theme_id, поскольку строка не будет отличаться. Фактически, отличное не нужно, просто GROUP BY."

Все еще смотрит ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...