Различные вопросы по PHP и MySQL

256K
.

Доброго времени суток. Столкнулся с такой проблемой. Есть база размером в 3,5 мегабайт, примерно 16000 записей, при этом некоторые записи являются так сказать дублями, то есть повторяются но у всех записей свой уникальный ИД и относятся эти записи к разным категориям. Как можно удалить из базы эти дубли?

.
человек И пароход

Pistolero, можно, какие столбцы в таблице ? напиши все

.

Crack, Вот запрос создания таблицы

CREATE TABLE IF NOT EXISTS `fact` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `text` text NOT NULL,
  `likes` int(11) NOT NULL DEFAULT '0',
  `time` int(30) NOT NULL,
  `id_category` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
.
человек И пароход

Pistolero, Время добавления дубликатов скорей всего разное поэтому сравнивать будем по тексту что не хорошо но за неимением лучшего варианта ...

mysql_query("DELETE `fact`.* FROM `fact` AS `fact`
    LEFT JOIN (SELECT `id` FROM `fact` GROUP BY `text`) AS `t2` 
        ON `fact`.`id` = `t2`.`id`
    WHERE `t2`.`id` IS NULL ");


Каждая запись останется только в одном экземпляре.
Также можно оставить либо первую добавленную либо последнюю запись (min(), max()).
Конкретно в запросе все зависит от group by.

Проверь все на бекапе !
.

Crack, Попробовал выполнить запрос на локалке , выдало ошибку
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"' at line 4

.
человек И пароход

Pistolero, В phpMyAdmin вставлять только то что в кавычках

.

Crack, Да, эт я тупонул, вроде сработало
Удалено 9694 строки. (Запрос занял 5.9993 сек.)
Офигеть сколько дублей

.

Crack, Спасибо, все получилось, дублей больше нет.

.
человек И пароход

Pistolero, пожалуйста

.
Pistolero

Помогите пожалуйста вырезать анонс статьи и кто добавил, чтоб осталось только название, картинка и рейтинг.

* (+/-)
$limit = 3;

$total = mysql_result(mysql_query('SELECT COUNT(*) FROM `library_texts` WHERE `premod`=1'), 0);
if ($total) {
    $sql = mysql_query("SELECT `id`, `name`, `time`, `uploader`, `uploader_id`, `count_views`, `count_comments`, `comments`, `announce` FROM `library_texts` WHERE `premod`=1 ORDER BY `id` DESC LIMIT " . $limit);

    while ($row = mysql_fetch_assoc($sql)) {
        echo '<div class="list' . (++$i % 2 ? 2 : 1) . '">'
        . (file_exists('files/library/images/small/' . $row['id'] . '.png')
            ? '<div class="avatar"><img src="files/library/images/small/' . $row['id'] . '.png" alt="screen" /></div>'
            : '')
        . '<div class="righttable"><h4><a href="library/index.php?id=' . $row['id'] . '">' . functions::checkout($row['name']) . '</a></h4>'
        . '<div><small>' . functions::checkout(bbcode::notags($row['announce'])) . '</small></div></div>';

        // Описание к статье
        $obj = new Hashtags($row['id']);
        $rate = new Rating($row['id']);
        $uploader = $row['uploader_id'] ? '<a href="' . core::$system_set['homeurl'] . '/users/profile.php?user=' . $row['uploader_id'] . '">' . functions::checkout($row['uploader']) . '</a>' : functions::checkout($row['uploader']);
        echo '<table class="desc">'
        // Тэги
        . ($obj->get_all_stat_tags() ? '<tr><td class="caption">' . $lng_lib['tags'] . ':</td><td>' . $obj->get_all_stat_tags(1) . '</td></tr>' : '')
        // Кто добавил?
        . '<tr>'
        . '<td class="caption">' . $lng_lib['added'] . ':</td>'
        . '<td>' . $uploader . ' (' . functions::display_date($row['time']) . ')</td>'
        . '</tr>'
        // Рейтинг
        . '<tr>'
        . '<td class="caption">' . $lng['rating'] . ':</td>'
        . '<td>' . $rate->view_rate() . '</td>'
        . '</tr>';
        echo '</table></div>';
    }
} else {
    echo '<div class="menu">' . $lng['list_empty'] . '</div>';
}
Всего: 7969