Autor Zpráva
kesajj
Profil *
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
Některé časteji řešené dotazy pro MySQL - FAQ » Odstranění duplicit ?
kesajj
Profil *
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
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 *
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
kesajj:
Vynechal jste název sloupce, nad kterým se má index udělat (tak závorka v příkladu).

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: