| 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: 12 let
|
|||
0