2010-03-16 4 views
0

Как я могу вставить «на дубликат ключа» в этом коде для удаления повторяющихся слов? или есть лучший метод, который вы знаете? Спасибо!!MySql - Выберите из - Не показывать повторяющиеся слова - возможно, «на дубликат ключа»?

это мой код:

function sm_list_recent_searches($before = '', $after = '', $count = 20) { 
// List the most recent successful searches. 
    global $wpdb, $table_prefix; 
    $count = intval($count); 
    $results = $wpdb->get_results(
     "SELECT `terms`, `datetime` 
     FROM `{$table_prefix}searchmeter_recent` 
     WHERE 3 < `hits` AND CHAR_LENGTH(`terms`) > 4 
     ORDER BY `datetime` DESC 
     LIMIT $count"); 
    if (count($results)) { 

     foreach ($results as $result) { 
      echo '<a href="'. get_settings('home') . '/search/' . urlencode($result->terms) . '">'. htmlspecialchars($result->terms) .'</a>'.", "; 
     } 

    } 
} 

ответ

3

ON DUPLICATE KEY UPDATE Используется для создания вставки для обновления записей, если они уже существуют. Он не используется для SELECT запросов

Вы хотите использовать предложение GROUP BY в столбце терминов, чтобы свести его к уникальным значениям. Вы можете использовать агрегированную функцию MAX, чтобы получить дату последней записи для этих условий.

SELECT `terms`, MAX(`datetime`) 
FROM `{$table_prefix}searchmeter_recent` 
WHERE 3 < `hits` AND CHAR_LENGTH(`terms`) > 4 
GROUP BY terms 
ORDER BY `datetime` DESC 
LIMIT $count 

Убедитесь, что индекс на колонке терминов, в противном случае это будет очень дорогостоящей операцией, особенно если вы используете его, чтобы сделать автозаполнение. Вы можете даже подумать о том, чтобы группировать свои термины во время вставки для достижения максимальной производительности.

+0

спасибо !! Великий!! – ali

1

Вы смотрели в использовании отчетливого ключевого слова в запросе? Это показывает, что он делает: http://newsourcemedia.com/blog/mysql-distinct-to-remove-duplicate-listing/

+0

DISTINCT будет влиять на все столбцы, поэтому условия с разными значениями даты и времени будут повторяться. Вы хотите GROUP BY. –