MySql - 从中​​选择 - 不显示重复的单词 - 可能是“重复键”?

时间:2010-03-16 14:37:49

标签: php mysql duplicate-removal

如何在此代码中插入“on duplicate key”以删除重复的单词?或者你知道更好的方法吗?谢谢!!

这是我的代码:

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>'.", ";
        }

    }
}

2 个答案:

答案 0 :(得分: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

确保在条款列上有索引,否则这将是一项非常昂贵的操作,尤其是当您使用它来进行自动完成时。您甚至可以考虑在插入时对术语进行分组以获得最佳性能。

答案 1 :(得分:1)

您是否考虑过在查询中使用distinct关键字?这表明了它的作用:http://newsourcemedia.com/blog/mysql-distinct-to-remove-duplicate-listing/