Autor Zpráva
grimword
Profil
VYŘEŠENO



Mám následující Mysql dotaz, který hledá duplicity:

            $treti="SELECT * FROM katalog_2 WHERE odkaz IN (SELECT odkaz FROM katalog_2 GROUP BY odkaz HAVING count(odkaz) > 1) ORDER BY odkaz";
            $ctvrty=mysql_query($treti);
            while ($dej=mysql_fetch_array($ctvrty))
            {
            echo "$dej[titulek]<br>";
            }

Jehož výsledkem je:

Medvěd
Medvěd
Pes
Pes
Pes
Pes
Pes
Kočka
Kočka
Kočka
Andulka
Andulka


Jak ho mám upravit, aby smazal všechny duplicity a nechal tam jen jeden exemplář duplicity? Tedy abych pak měl v databázi:

Medvěd
Pes
Kočka
Andulka
+ to co nebylo duplicitní
juriad
Profil
grimword:
Potřebuješ to pravidelně, nebo jednorázově?
Pokud jednorázově, tak nejjednodušší je vytvořit novou tabulku se stejnou strukturou a vložit do ní všechna data jen jednou.
Toto má navíc výhodu, že můžeš výsledek zkontrolovat a případně doladit. Pak stačí tabulky přejmenovat.

Jakou povahu mají ta data? Je duplicita v celém řádku nebo jen ve sloupci odkaz? Má záznam nějaké id? Který z duplicitních záznamů se má zachovat?
grimword
Profil
Potřebuji to udělat jen jednorázově.

Řádky mají unikátní ID a duplicitní je jen "odkaz". Je jedno, který záznam zůstane zachován.

Nejraději nějaký script, který tu tabulku projede a promaže.


Vyřešeno:

DELETE n1 FROM katalog_2 n1, katalog_2 n2 WHERE n1.id > n2.id AND n1.odkaz = n2.odkaz

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: