Hledáte fotografa?
Zobrazují se odpovědi 1 až 8 z 8

Smazání poslední neprázdné buňky v řádku

  1. Zdravim,

    resim problem - mam tabulku o asi 150tis. radcich a 120 sloupcich.
    Potrebuju v kazdem radku smazat jeho posledni nenulovy zaznam - ten je bohuzel ale pokazde v jinem sloupci.
    Zkousel jsem pomoci PHP skriptu, ktery prochazel tabulku radek po radku, v kazdem prochazel sloupce od konce, dokud nenarazil na nenulovou hodnotu, kterou pak pomoci UPDATE query prepsal na null.
    Ten vsak bezel nekolik desitek minut a zvladl jen par tisic radku - coz mi prijde divne.
    Neresil jste nekdo neco takoveho a neznate rychlejsi metodu?

  2. Co se právě děje na Webtrhu?
  3. naniccz Hodnocení: 2 (100%) naniccz je na dobré cestě
    2
    Nedokážu si představit upotřebení takového požadavku, a i tabulky s 120 sloupci. Každopádně by se dalo zvládnou pomocí 120 SELECTů a UPDATŮ...
    select PK from TBL where COL120 is null and .... and COL{120-i} is null
    a následně UPDATE:
    update TBL set COL{120-i-1} = null where PK in (.. výsledek předchozího selectu ..)
    pro i=0..119

    ---------- Post added 19.6.2012 at 21:02 ----------

    Vlastně to jde ještě jednodušeji, jen s UPDATy
    update TBL set COL{i} = null where COL{i+1} is null and COL{i+2} is null and .... and COL120 is null
    pro i=1..120

  4. uff... ktera pak je to normalni forma? :D

  5. skoro ani nemusim vedet k cemu to slouzi nebo bude slouzit a je mi uplne jasny ze tam je nakej hodne spatnej navrh databaze...

  6. navrh nenavrh, znam inzertni/realitni system, ktery ma v hlavni tabulce 60 sloupcu vetsinu nulovou, ale provozovatelum vydelava miliony... vyvoj zapocal na nekde okolo 2001... taky jsem u par webu musel resit po tom co jich par firma koupila upravy. a je to peklo :)

    nehlede na to, ze treba sharepoint tabulky resi podobne int1,int2-40...

    hijack: sice nechapu moc vyznam, ale tak ten svuj script spoustej sekvencne treba po 100 radcich a ukladej si posledni PK nekam do dalsi tabulky a pak "where `pk`>ulozene_id"

    ja bych to asi resil tak, ze vyuziju SHOW COLUMNS FROM tabulka, nazvy sloupcu si ulozil jako klice do pole a pak prochazel radky tabulky a do hodnot toho pole pak ukladal pole PK. samozrejme sekvence treba po 1000 a pak udelal update pro kazdej klic v te array.

    Kód:
    $pole = array('NazevSloupce'=>array(4,2,3));
    $sql = "update `tabulka` set `NazevSloupce`=null where `PK` in (".implode(",",$pole['NazevSloupce']).")";
    Naposledy upravil acidclick : 19.06.2012 v 22:02

  7. pes502 Hodnocení: 4 (100%) pes502 je na dobré cestě
    6
    Nebo stáhni databázi a spusť to na localhostu, nastav neomezenou dobu běhu skriptu a za pár (desítek) minut to musí být

  8. Diky za rady a tipy, vim, ze to na prvni pohled vypada docela silene, tak to trochu priblizim - jedna se o tabulku, ktera je vytvorena z csv souboru a obsahuje statistiku nejakych sledovanych ukazatelu v cca 120 letech. Co radek, to ukazatel. Puvodne jsem si myslel, ze smazani toho posledniho neprazdneho sloupce v kazdem radku bude jednodussi v PHP/MySQL, ale zatim mi to nezafungovalo (na localhostu s neomezenou dobou behu jsem to zkousel, po hodine to ale uplne vytuhlo a neskoncilo zdaleka ani v pulce).
    Asi bych to zkusil tedy trochu jinou cestou - upravou toho CSV souboru jeste pred jeho uploadem do MySQL. Nenapada vas jak timto zpusobem odstranit z radky v CSV posledni zaznam?

  9. naniccz Hodnocení: 2 (100%) naniccz je na dobré cestě
    8
    Pokud import CSV proběhne z PHP bez problému, a následně máte problém v PHP s tou tabulkou pracovat v reálném čase, tak je asi někde problém. Nemáte indexy na těch měněných sloupcích?

    ---------- Post added 20.6.2012 at 15:07 ----------

    A podle NF by hodnoty ukazatelů patřily do jiné tabulky, než "seznam ukazatelů".

Hostujeme u Server powered by TELE3