Доброго времени суток. Столкнулся с такой проблемой. Есть база размером в 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, Спасибо, все получилось, дублей больше нет.
Помогите пожалуйста вырезать анонс статьи и кто добавил, чтоб осталось только название, картинка и рейтинг.
* (+/-)
$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>';
}