Autor | Zpráva | ||
---|---|---|---|
kesajj Profil * |
#1 · Zasláno: 27. 10. 2014, 14:21:36
Mám v databázi téměř 2,5 miliónu záznamů, které jsou v 80% s vícero stejnými názvy. Existuje přímo mySQL dotaz, který by tyto identické názvy smazal a ponechal vždy 1 stejný název? Napadlo mě udělat druhou mySQL tabulku a tam zapisovat tyto názvy a porovnávat je, zda-li tam již název je nebo není.
To ostatně jsem již udělal, ale zpracování je nechutně zdlouhavé :( 1000 záznamů se zpracovává tak 10 i 14 sekund. Samozřejmě dělám to přes LIMIT a postupně. Můj PHP script: ... kde nechci, aby se mě jako název uložilo město, tak že porovnávám ještě s další tabulkou. No a ukládám ještě počet, kolik bylo stejných názvů. $xml = sql_all("SELECT * FROM tags_2 ORDER BY cron LIMIT $i, 500"); foreach ($xml as $data) { $tag = $data[1]; if ($tag != "" AND $tag != "archiv" AND $tag != "recenze") { $mesto = sql("SELECT id FROM mesta WHERE seo='$tag'"); $zjisti = sql("SELECT id, pocet FROM tags WHERE nazev='$tag'"); if ($zjisti[0] == "" AND $mesto == "") { sql("insert into tags values ('', '$tag', '', '', '0')"); } else { $pocet = $zjisti[1] + 1; sql("UPDATE tags SET pocet='$pocet' WHERE id='$zjisti[0]'"); } } sql("UPDATE tags_2 SET cron='$time' WHERE id='$data[0]'"); } |
||
mimochodec Profil |
#2 · Zasláno: 27. 10. 2014, 14:25:54
|
||
kesajj Profil * |
#3 · Zasláno: 27. 10. 2014, 14:27:01
Hmm, zpracovává to i více jak 40 sekund :(
Při každém zpracování vždy přičtu další +500 $i = $i + 500; , tj. LIMIT bude 0,500 ... pak 500,500 ... 1000,500 .... 1500,500 apod. Snad to dělám správně.
|
||
Alphard Profil |
#4 · Zasláno: 27. 10. 2014, 14:32:44
To obecné Některé časteji řešené dotazy pro MySQL - FAQ » Odstranění duplicit bohužel neřeší úpravu počtu.
Když se rámcově dívám na ten váš kód, nešlo by ten select kombinovat s group by nazev , tím si zjistit i počet a vložit to hned do dočasné tabulky?
|
||
kesajj Profil * |
#5 · Zasláno: 27. 10. 2014, 14:48:28 · Upravil/a: kesajj
Nevadí, tak tabulky upravím. Pokud tomu rozumím, tak musím mít v tabulce "tags" ID, NAZEV a pak použít
ALTER IGNORE TABLE tags ADD UNIQUE INDEX nazev; ALTER TABLE tags DROP INDEX nazev; Chyba v dotazu (1064): Syntax error near '' at line 1 |
||
Kajman Profil |
#6 · Zasláno: 29. 10. 2014, 08:27:57
kesajj:
Vynechal jste název sloupce, nad kterým se má index udělat (tak závorka v příkladu). |
||
Časová prodleva: 9 let
|
0