php - MySql - 从中​​选择 - 不要显示重复的单词 - 也许是 "on duplicate key"?

标签 php mysql duplicates

如何在此代码中插入“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>'.", ";
        }

    }
}

最佳答案

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

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

关于php - MySql - 从中​​选择 - 不要显示重复的单词 - 也许是 "on duplicate key"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2455220/

相关文章:

php - Ajax 文件上传并预览

r - 在 R 的数据框中查找相似的行(不重复)

dictionary - Elixir:将列表简化为映射计数发生的次数(模式与另一个参数上的映射键匹配)

php - fatal error : Cannot use object of type stdClass as array in

php - 如何在 Markdown 通知中插入换行符

php - 离线存储数据直至在线连接

mysql - 在 mysql workbench 中启动迁移向导时出现问题

mysql - Artifactory 无法连接到主机 mysql

python - 从列表列表中获取独特的项目?

php - 使用 PHP 和 MySQL 从数组插入多个值并将它们与单个值关联