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 |
#2 · Zasláno: 4. 11. 2014, 11:00:11
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 |
#3 · Zasláno: 4. 11. 2014, 11:23:13 · Upravil/a: grimword
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 |
||
Časová prodleva: 9 let
|
0