Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Jak skasować zduplikowane rekordy z danym parametrem
oczko991
post
Post #1





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 15.07.2009

Ostrzeżenie: (0%)
-----


Witam.

Posiadam tabelę: cb_cms_ksiazki

i chciałbym skasować rekordy `title`, ale zostawić tylko ten który ma najwyższy `dls`

czyli np.

Agrafka - Maroko, dls 2
Agrafka - Maroko, dls 0
Agrafka - Maroko, dls 0
Agrafka - Maroko, dls 0
Agrafka - Maroko, dls 233
Agrafka - Maroko, dls 500

usunac wszystkie, a zostawic tylko tą z dls 500


  1.  
  2.  
  3.  
  4.  

a nie to bedzie zle zapytanie, bo to skasuje rekordy rozne a nie zduplikowane ;/

Ten post edytował oczko991 5.03.2014, 17:47:37
Go to the top of the page
+Quote Post
viking
post
Post #2





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


  1. DELETE FROM `cb_cms_ksiazki` WHERE `dls` NOT IN (SELECT max(`dls`) FROM `cb_cms_ksiazki`)


Tylko uważaj bo pewnie chcesz jakoś po tytule albo czymś grupować. To takiego warunku nie uwzględni.

Ten post edytował viking 5.03.2014, 17:52:44
Go to the top of the page
+Quote Post
oczko991
post
Post #3





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 15.07.2009

Ostrzeżenie: (0%)
-----


Ale czy to mi wywali rekordy z najmniejszym dls spośród duplikatow?
Czy czasem z calej bazy?
Go to the top of the page
+Quote Post
viking
post
Post #4





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


A skąd mogę wiedzieć co zrobi nie znając struktury bazy? Poza tym liczę ze nie będziesz tego testował na produkcyjnej bazie a będzie to wyłącznie podpowiedź jak napisać finale zapytanie.
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #5





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

Ostrzeżenie: (0%)
-----


Mam nadzieję, że tego nie wykonałeś. A jeśli już, to że wcześniej kopię zrobiłeś.
Bo po wykonaniu tego zapytania zostałby ci w tabeli 1 (słownie: JEDEN) rekord.
W zapytaniu zabrakło grupowania. Prawidłowo powinno być:
  1. DELETE FROM `cb_cms_ksiazki` WHERE `dls` NOT IN (SELECT max(`dls`) FROM `cb_cms_ksiazki` GROUP BY title)
Go to the top of the page
+Quote Post
viking
post
Post #6





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Dlatego napisałem żeby dodał grupowanie po odpowiedniej kolumnie, najpewniej title.
Go to the top of the page
+Quote Post
oczko991
post
Post #7





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 15.07.2009

Ostrzeżenie: (0%)
-----


(IMG:http://img703.imageshack.us/img703/5936/mdza.png)
  1. DELETE FROM `cb_cms_ksiazki` WHERE `dls` NOT IN (SELECT max(`dls`) FROM `cb_cms_ksiazki` GROUP BY title)

WYNIK: #1093 - You can't specify target table 'cb_cms_ksiazki' for update in FROM clause


znalazłem takie polecenie

  1. SELECT title, COUNT( * ) AS cnt
  2. FROM cb_cms_ksiazki
  3. GROUP BY title
  4. HAVING cnt >1
  5. ORDER BY `cnt` ASC
  6.  

ono mi pokazuje wszystkie duplikaty
(IMG:http://img42.imageshack.us/img42/4467/qh4x.png)

i jak teraz zrobic polecenie na wywalenie kazdego a zostawic z najwiekszym dls?
(IMG:http://img197.imageshack.us/img197/2540/8zmr.png)

Ten post edytował oczko991 6.03.2014, 19:18:26
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 3.10.2025 - 07:02