Autor Zpráva
Prefin
Profil
Ahojda.
Prosím o radu s tímhle malým problémem.
Udělal jsem si takovou fci na odstraňování duplicitních záznamů z libovolné tabulky:
// Funkce na odstranění duplicitních záznamů v databázi
function OdstranDuplicityDb($tabulka,$sloupec) {
    $nova_tabulka = $tabulka."_zal";
    $sql[0] = "CREATE TABLE `".$nova_tabulka."` LIKE `".$tabulka."`";
    $sql[1] = "ALTER TABLE `".$nova_tabulka."` ADD UNIQUE (`".$sloupec."`)";
    $sql[2] = "INSERT IGNORE `".$nova_tabulka."` SELECT * FROM `".$tabulka."`";
    $sql[3] = "DROP TABLE `".$tabulka."`";
    $sql[4] = "RENAME TABLE `".$nova_tabulka."` TO `".$tabulka."`";
    $sql[5] = "ALTER TABLE `".$tabulka."` DROP INDEX `".$sloupec."`";
    for($i=0;$i<=5;$i++) {
        echo $sql[$i]."<br>";
        if(mysql_query($sql[$i])) {
        $kontrola .= "$i krok OK<br>";
        } else {$kontrola .= "$i krok se nezdařil<br>";}
    }
    return $kontrola;
}
Funkce běží správně až na tu maličkost že poslední příkaz (odstranění UNIQUE) nevyhodí chybu ale prostě se neprovede.
V tabulce index UNIQUE prostě zůstane a přiznám se že nevím proč,protože když ten příkaz zadám přímo v phpmyadminu tak se index odstraní.
Tady je echo $sql:
CREATE TABLE `poptavka_zal` LIKE `poptavka`
ALTER TABLE `poptavka_zal` ADD UNIQUE (`kod_poptavka`)
INSERT IGNORE `poptavka_zal` SELECT * FROM `poptavka`
DROP TABLE `poptavka`
RENAME TABLE `poptavka_zal` TO `poptavka`
ALTER TABLE `poptavka` DROP INDEX `kod_poptavka`
Jde o to, že se do tabulky musí vkládat duplicity (ve smyslu tohoto sloupce) a až po jejich zpracování se můžou vyčistit.
Jo je to v krocích kvůli zachycení chyb, přemýšlím jak to ještě zkrátit a zjednodušit jestli je to možný.
Díkas


Prefin:
Už jsem přišel na chybu a ta je mezi židlí a klávesnicí.
Těch indexů tam bylo víc (nějak se tam dostaly asi při postupném zkoušení id_poptavka_2 ...) a index se tedy odebral ale ještě tam zbyl jiný.
Kajman
Profil
Existuje i alter ignore viz.
Některé časteji řešené dotazy pro MySQL - FAQ » Odstranění duplicit

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: