MySql - seçin - Duplicate Words Göster etmeyin - belki "yinelenen anahtar üzerinde"?

2 Cevap php

nasıl yinelenen sözcükleri kaldırmak için bu Kanunu'ndaki "yinelenen anahtar üzerinde" ekleyebilirsiniz? ya da bildiğiniz daha iyi bir yöntem var mıdır? teşekkür ederim!

Bu benim kod:

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 Cevap

ON DUPLICATE KEY UPDATE zaten varsa kayıtları güncellemek için bir ekleme neden kullanılır. Bu SELECT sorguları için kullanılan değil

Ne istediğiniz benzersiz değerlere daraltmak için şartlar sütunda GROUP BY tümcesi kullanmaktır. Sen bu terimleri için son kayıt tarihi almak için MAX toplama işlevini kullanabilirsiniz.

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

Aksi takdirde bu bir otomatik tamamlama yapmak için kullanıyorsanız, özellikle çok pahalı bir operasyon olacak, terimler sütun üzerinde bir dizin olduğundan emin olun. Hatta en iyi performans için uç zamanda şartlarını gruplama düşünebilirsiniz.

Eğer sorguda ayrı anahtar sözcüğünü kullanarak içine baktı mı? Bu ne gösterir: http://newsourcemedia.com/blog/mysql-distinct-to-remove-duplicate-listing/