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