0

このコードに「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>'.", ";
        }

    }
}
4

2 に答える 2

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

用語列にインデックスがあることを確認してください。そうしないと、特にオートコンプリートを作成するためにインデックスを使用している場合、これは非常にコストのかかる操作になります。最高のパフォーマンスを得るために、挿入時に用語をグループ化することを検討することもできます。

于 2010-03-16T14:58:41.670 に答える
1

クエリでdistinctキーワードを使用することを検討しましたか? これはそれが何をするかを示しています:http://newsourcemedia.com/blog/mysql-distinct-to-remove-duplicate-listing/

于 2010-03-16T14:47:11.280 に答える