如何在此代码中插入“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/