Удаление дублей. Где ошибка?

Статус
В этой теме нельзя размещать новые ответы.

LEXAlForpostl

Мой дом здесь!
Регистрация
21 Май 2008
Сообщения
766
Реакции
228
Здравствуйте.
Написал скриптик, который из таблицы удаляет дубли.
PHP:
<?

$db = mysql_connect("localhost", "root","") or die ("Ошибка соединения");
mysql_select_db("db", $db)or die ("Ошибка соединения с бд ");
$result = mysql_query("SELECT id, text FROM table");
while ($row = mysql_fetch_array($result, MYSQL_BOTH)) {
    $sql="DELETE FROM `table` WHERE `id` <> '".$row["id"]."' AND `url`='".$row["text"]."'";
	echo $sql."<br>";
	$result2 = mysql_query($sql) or die (mysql_error());
}

?>
Скрипт, почему-то удаляёт всё.
Пробовал
PHP:
  $sql="DELETE FROM `table` WHERE `id` != '".$row["id"]."' AND `url`='".$row["text"]."'";
Не помогает, также удаляет всё.

Да, и ещё.
Если вставляю отдельно sql запрос в РНРМуАдмине, то удаляются только дубли.
А через скрипт удаляется всё.
 
В SELECT-запросе добавь условие GROUP_BY(`text`)
т.е. запрос должен быть типа
Код:
$result = mysql_query("SELECT id, text FROM table GROUP_BY(`text`)");
а дальше всё как ты делал ;)
 
Ещё вопрос.
Как сделать чтобы запись в бд добавлялась, если она уникальна по полю text.
В свойствах поля поставил uniq, но при добавлении такой же записи выдаёт ошибку.
Можно сделать так чтобы не выдавало ошибку и скрипт дальше работал.
Или как по-другому можно реализовать не добавления уже имеющейся записи по полю text?
 
для игнорирования ошибок есть параметр IGNORE:
INSERT IGNORE INTO ... VALUES ...

или может подойдёт ON DUPLICATE KEY UPDATE, тогда если при добавлении найдутся дубликаты то только обновить


ещё дубликаты можно удалять одним запросом
Код:
DELETE dup_row.*
FROM table AS dup_row
INNER JOIN (

    SELECT id, text, MIN(id) AS min_id
    FROM table
    GROUP BY text
    HAVING COUNT(*) > 1

) AS good_row
ON good_row.text = dup_row.text
AND good_row.text = dup_row.url
AND good_row.min_id <> dup_row.id
 
Ещё вопрос.
Как сделать чтобы запись в бд добавлялась, если она уникальна по полю text.
В свойствах поля поставил uniq, но при добавлении такой же записи выдаёт ошибку.
Можно сделать так чтобы не выдавало ошибку и скрипт дальше работал.
Или как по-другому можно реализовать не добавления уже имеющейся записи по полю text?
Если же хочешь, чтобы при отсутствии записи она добавлялась, а при наличии в базе - обновлялась новыми данными, можно использовать replace, указывая значение уникального поля.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху