[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: удаление повторяющихся элементов
Aleksandr?php
Подскажите пожалуйста, какой командой можно удалить повторяющиеся элементы из базы данных? Вот например у меня такая таблица:
| id | id_author | id_genre |
| 1 | 2 | 1 |
| 2 | 5 | 3 |
| 3 | 2 | 1 |
Как удалить повторяющуюся 3-ю строку?



Спустя 22 минуты, 37 секунд (6.10.2011 - 00:48) m4a1fox написал(а):
distin во время выборки!

Спустя 3 минуты, 49 секунд (6.10.2011 - 00:52) Aleksandr?php написал(а):
DISTINCT во время выборки просто не будет мне выводить повторяющийся элемент, а вот как чтобы кроме этого, повторяющийся элемент еще и из базы удалился? или может я че не правильно понимаю?

Спустя 4 минуты, 32 секунды (6.10.2011 - 00:56) m4a1fox написал(а):
А! Именно удалился? Ну товарищ, что вам сказать! Можно шагать от обратного! Не нужно заносить в БД если такой уже есть!

Спустя 4 минуты, 39 секунд (6.10.2011 - 01:01) Aleksandr?php написал(а):
тоесть, это не возможно?
Я просто админку пытаюсь делать. И что если админ будет по тупости заносить одинаковые данные? или так и быть, пусть себе остается в базе, я просто выводить одинаковое не буду?

Спустя 1 минута, 49 секунд (6.10.2011 - 01:03) Aleksandr?php написал(а):
или может можно как-то предотвратить ввод данных, которые уже существуют в базе? Ну чтоб админ просто не смог ввести данные, если таковы уже там имеются

Спустя 5 минут, 37 секунд (6.10.2011 - 01:08) m4a1fox написал(а):
Ну это не невозможно! Просто это сложно! Для этого тебе надо обновлять таблицу. При обновлении заносить пустоту! Просто я не слышал об удалении данных в табл. Вот удаление строк это да, а вот каких-то определенных данных - нет! Так что, тут либо писать такой запрос, что бы обновлял, либо не заносить вообще! Твой выбор?

Спустя 59 секунд (6.10.2011 - 01:09) m4a1fox написал(а):
Aleksandr?php
Цитата
или может можно как-то предотвратить ввод данных, которые уже существуют в базе? Ну чтоб админ просто не смог ввести данные, если таковы уже там имеются

Я про это и говорю! Проверку делать еще до того как данные попадут в БД а не после!

Спустя 3 минуты, 37 секунд (6.10.2011 - 01:13) Winston написал(а):
Цитата (Aleksandr?php @ 6.10.2011 - 01:01)
И что если админ будет по тупости заносить одинаковые данные

Значит это уже не админ smile.gif
Цитата (m4a1fox @ 6.10.2011 - 01:08)
Ну это не невозможно

Почему не возможно? Просто сделать нужные поля уникальными.

Спустя 1 минута, 7 секунд (6.10.2011 - 01:14) Aleksandr?php написал(а):
Ну а строк как? Мне же это и надо: удалить например 3-ю строку, если она идентична например 1-й.

Спустя 49 секунд (6.10.2011 - 01:15) m4a1fox написал(а):
Наврно не удалить а обновить на пустоту!

Спустя 2 минуты, 13 секунд (6.10.2011 - 01:17) Aleksandr?php написал(а):
Админ в данном случае - это имеется ввиду человек-юзер который може добавлять те или инные данные через форму, чекбоксы и т.д. в базу данных

Спустя 1 минута, 19 секунд (6.10.2011 - 01:18) Aleksandr?php написал(а):
А можно вкратце описать как обновлять на пустоту?

Спустя 1 минута, 32 секунды (6.10.2011 - 01:20) Aleksandr?php написал(а):
Цитата (Winston @ 5.10.2011 - 22:13)
Цитата (Aleksandr?php @ 6.10.2011 - 01:01)
И что если админ будет по тупости заносить одинаковые данные

Значит это уже не админ smile.gif
Цитата (m4a1fox @ 6.10.2011 - 01:08)
Ну это не невозможно

Почему не возможно? Просто сделать нужные поля уникальными.

как поля делать уникальными?

Спустя 1 минута, 33 секунды (6.10.2011 - 01:21) Winston написал(а):
Цитата (Aleksandr?php @ 6.10.2011 - 01:18)
А можно вкратце описать как обновлять на пустоту?

Посмотри должно помочь.

Спустя 2 минуты, 56 секунд (6.10.2011 - 01:24) m4a1fox написал(а):
Цитата
Ну это не невозможно

Это все правильно прочитали! НЕ НЕвозможно - т.е. реально :)


UPDATE `tblname` SET `stroke`='' WHERE `someint` = `someint`

Где-то так! Извини, значений твоих полей не знаю! Пришлось выдумывать!

Спустя 2 минуты, 34 секунды (6.10.2011 - 01:27) Winston написал(а):
Цитата (m4a1fox @ 6.10.2011 - 01:24)
Это все правильно прочитали! НЕ НЕвозможно - т.е. реально smile.gif

Я прочитал как "невозможно" biggrin.gif
Цитата (m4a1fox @ 6.10.2011 - 01:24)
UPDATE `tblname` SET `stroke`='' WHERE `someint` = `someint`

Что-то мне кажется, что после такого запроса в таблице останутся только пустые записи unsure.gif biggrin.gif

Спустя 2 минуты, 4 секунды (6.10.2011 - 01:29) Aleksandr?php написал(а):
О WINSTON, походу это то что мне нужно!! Спасибо very march!!!
Короче спасибо всем ребята, думаю после данной вами информации будет грех не сделать то что мне надо!!!

Спустя 41 минута, 12 секунд (6.10.2011 - 02:10) imbalance_hero написал(а):
Допустим выбрать повторяющиеся:
SELECT `id`,COUNT(*) as `cnt`
FROM `table`
GROUP BY `поле с повторами!`
HAVING `cnt` > 1


И не надо колонку уникальной делать :)

Спустя 1 час, 10 минут, 41 секунда (6.10.2011 - 03:21) dadli написал(а):
Aleksandr?php

DELETE FROM mytable WHERE id IN (
SELECT id FROM (
SELECT id,id_author,id_genre FROM mytable WHERE id_author
IN (SELECT id_author FROM (
SELECT id_author,COUNT(id_author) AS idaut FROM mytable GROUP BY id_author
)
AS tt1
WHERE idaut > 1 )
AND
id_genre IN (
SELECT id_genre FROM (
SELECT id_genre,COUNT(id_genre) AS idgenr FROM mytable GROUP BY id_genre
)
AS tt2
WHERE idgenr > 1
)
)
AS ttt
)

AND

id NOT IN
(SELECT mid FROM (
SELECT MIN(id) as mid,id_author,id_genre FROM mytable GROUP BY id_author, id_genre
) AS tttt
)



как ви хотели, етот запрос удаляет все повтаряшсие записи. оставляет толко те, у каторих есть сами маленки id из одинакових строк, например если есть

| id | id_author | id_genre |
| 1 | 2 | 1 |
| 2 | 5 | 3 |
| 3 | 5 | 3 |
| 4 | 2 | 1 |
| 5 | 2 | 1 |


оставляет толко ети записи

| id | id_author | id_genre |
| 1 | 2 | 1 |
| 2 | 5 | 3 |

Спустя 10 часов, 29 минут, 23 секунды (6.10.2011 - 13:50) Aleksandr?php написал(а):
Спасибо тебе большое мистер DADLI !!! Очень рад, что ты есть на этом форуме ибо твой ответ есть самый удовлетворительный и рабочий по данной теме. Это именно то что мне нужно было! У меня все получилось!!!))) 6 баллов из 5 тебе! biggrin.gif

Спустя 4 часа, 26 минут, 52 секунды (6.10.2011 - 18:17) imbalance_hero написал(а):
Aleksandr?php
Ну я же уже всё готовое дал, осталось только объеденить... тот вариант САМЫЙ РАБОЧИЙ, потому что тебе дали ПОЛНОСТЬЮ ГОТОВЫЙ, а ты даже не думал, что и как делать...

DELETE FROM `test2`
WHERE `id_gente` IN (
SELECT `id_gente` FROM (
SELECT `id_gente` FROM `test2`
GROUP BY `id_gente`
HAVING COUNT(*) > 1
) AS `t1`
)
AND `id` NOT IN (
SELECT `id` FROM (
SELECT `id` FROM `test2`
GROUP BY `id_gente`
HAVING COUNT(*) > 1
) AS `t2`
)

Спустя 3 дня, 19 часов, 12 минут, 27 секунд (10.10.2011 - 13:29) Aleksandr?php написал(а):
Ты прав на все 100 Imbalance_hero! Если чесно твой ответ тоже помог мне именно разобраться, так как с готовым ответом я впринципе ниче не думал, а с твоим еще и подумал! Спасибо!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.