Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Странно работает удаление одинаковых записей
Покинул форум
Сообщений всего: 11
Дата рег-ции: Июнь 2010
Помог: 0 раз(а)
Имею таблицу
id | text
-------------
1 | qq
2 | ww
3 | qq
4 | gf
5 | pu
6 | ww
7 | qq
8 | cx
Видим, что существуют записи с одинаковым значением 'text' (qq, ww)
Нужно удалить одинаковые записи, но, чтобы одна из записей осталась, т.е. запись со значением 'qq' в базе повторяется 3 раза (id -1,3,7), нужно удалить записи с id == 3,7
Написал вот такой код:
if(($f==$s)&&($f_id!=$s_id))// сравниваю одинаковые ли записи, но чтобы id были разные
{
mysql_query("DELETE FROM $table WHERE ID=$s_id;");// Удаляю повторяющуюся запись
}
}
}
}
Ошибка вот в чём. Удаляются все записи, т.е. будут удалены все записи со значением 'ww', 'qq'.
Мне кажется, что я не замечаю чего то элементарного, просто глаза замылены
OrmaJever
Отправлено: 14 Марта, 2011 - 01:21:55
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
Лутше при записи в базу проверять значения и записывать только уникальные.
Но если решили однократно почистить базу то просто достаньте все значения из таблицы в масив, затем array_unique(), и обратно запишите уже уникальные значения
SELECT id FROMTABLEWHERE t1 EXISTS(SELECT*FROMTABLE t2 WHERE t2.id < t1.id AND t2.text = t1.text)
- айдишки получили, теперь по ним можно удалить.
t1 и t2 на сколько я понимаю - это две одинаковые таблицы?
При выполнении данного запроса вылетает вот такая ошибка:
Цитата:
#1064 - 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 'TABLE WHERE auto EXISTS (SELECT * FROM TABLE auto2 WHERE auto2.id < auto.id AND ' at line 1
Champion
Отправлено: 14 Марта, 2011 - 20:03:41
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
dezz пишет:
t1 и t2 на сколько я понимаю - это две одинаковые таблицы?
Это одна таблица. А когда происходит ошибка, мне лучше бы взглянуть на тот запрос, в котором она произошла, а не на свой. (Добавление)
dezz пишет:
FROM TABLE WHERE t1 EXISTS
... FROM TABLE t1 WHERE EXISTS ...
Мимо написал.
dezz
Отправлено: 14 Марта, 2011 - 20:20:50
Новичок
Покинул форум
Сообщений всего: 11
Дата рег-ции: Июнь 2010
SELECT id FROMTABLEWHERE t1 WHEREEXISTS(SELECT*FROMTABLE t2 WHERE t2.id < t1.id AND t2.text = t1.text)
Ошибка:
Цитата:
#1064 - 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 'TABLE WHERE t1 WHERE EXISTS (SELECT * FROM TABLE t2 WHERE t2.id < t1.id AND t2.t' at line 1
Champion
Отправлено: 14 Марта, 2011 - 20:23:57
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
Не надо ничего переименовывать. Блин, как у тебя таблица называется? (Добавление)
SELECT id FROM настоящееимятвоейтаблицы t1 WHEREEXISTS(SELECT*FROM настоящееимятвоейтаблицы t2 WHERE t2.id < t1.id AND t2.text = t1.text)
Поменяй только настоящееимятвоейтаблицы. Всё. Ну надо синтаксис sql-то знать (Добавление)
И текст сообщения об ошибке читать
dezz
Отправлено: 14 Марта, 2011 - 20:34:03
Новичок
Покинул форум
Сообщений всего: 11
Дата рег-ции: Июнь 2010
Помог: 0 раз(а)
Спасибо, конечно с именем таблицы я немного протупил, я сразу обратил на это внимание, просто смутил тот факт, что TABLE было в верхнем регистре и по этому подумал, что так и надо...
Champion
Отправлено: 14 Марта, 2011 - 20:35:37
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
Ну да, это здешняя шняжка регистр подняла. Надо было мне не слово table использовать, чтоб не смущать
zardoz
Отправлено: 15 Марта, 2011 - 00:40:35
Гость
Покинул форум
Сообщений всего: 100
Дата рег-ции: Сент. 2010
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.