Autor Zpráva
Andrej.B
Profil
Zdravim,
nakoniec som dal na rady tu a skusam si zostrojit vlastny upload CSV suborov z ERP systemu do DB, ktory by nepotreboval moj zasah, ale dial by sa len na strane uzivatela.

Problem je, ze kazdy clovek ma inak nastaveny export do CSV, ine stlpce, ale aj ine postavenie stlpcov v tom CSV exporte. Jedine, co viem, su stlpce v DB a to ze v uzivatelovom CSV sa tam budu na 100% nachadzat ale na inom mieste.

Priklad:
Struktura DB


Datum
Č. objednávky
Zakaznik

Struktura CSV od uzivatela 1
Datum;Datum2;Zakaznik;Č. objednávky
23.9.2022;26.9.2022;Datart;F11646
21.9.2022;29.9.2022;Datart;F11649
26.9.2022;29.9.2022;Tesco;F11654
23.9.2022;30.9.2022;Datart;F11662


Struktura CSV od uzivatela 2
Datum;Zakaznik;Č. objednávky;Datum2;Vzorka
23.9.2022;Datart;F11646;26.9.2022;False
21.9.2022;Datart;F11649;29.9.2022;False
26.9.2022;Tesco;F11654;29.9.2022;False
23.9.2022;Datart;F11662;30.9.2022;True

Pre mna su najdolezitejsie tie udaje, ktore potrebujem nahrat do DB, tie si pozriem takto:
$sql = "DESCRIBE plan";
$result = $conn->query($sql);
while ($column = $result->fetch_assoc()) 
{
  echo  $column['Field'];
  echo  "<br />\n";
}

Vysledok je:
Datum
Č. objednávky
Zakaznik

Teraz viem, ktore Stlpce su dolezite pre moj upload z toho CSV
Nacitanie csv riesim, ak su vsetky data vzdy rovnake takto:

$num = count($getData);
        
        for ($c=0; $c < $num; $c++) {
            echo $getData[$c].';';
            
        }      
echo "<br />\n";

Ako do toho zapracovat len tie Stlpce, ktore dostanem z Describe DB? Pokial by boli na rovnakych miestach, napriklad len prvych 3 ako v Db, dal by som to len ako $getData[0], $getData[1], $getData[2] ale takto data od uzivatela nemam.

Diky za pomoc
Kajman
Profil
Pokud názvy sloupců v prvním řádku csv vždy sedí s názvem sloupečku (což pochybuji, že by někdo rozumný nazval sloupec 'Č. objednávky'), tak stačí si udělat pole sloupců v db, kde bude klíčem název sloupce, a průzkumem prvního řádku z csv nastavit pořadí sloupce v csv, pokud se nadpis z csv shoduje.

Spíše bych ale čekal, že to nebude souhlasit. Pak bych uživateli vypsal kus z csv, kde by musel vybrat k tomu sloupci v csv některý ze sloupců tabulky nebo nastavit, že se má ignorovat. Pak ve druhém kroku byste už věděl, který sloupec v db odpovídá sloupci v csv. Pro snažší opakování, by si pak mohl systém pamatovat přiřazení názvu z csv k názvu v db pro příští první krok s definicí sloupců.
anonym_
Profil *
Andrej.B:
Krom toho, co píše Kajman, ideální je domluvit se s těmi dodavateli/odběrateli (nevím, co to je), aby posílali data v předem definovaném formátu. Strojové zpracování něčeho, kde neznám formát a ani počet sloupců, je na prd.
Andrej.B
Profil
Vec je v tom, ze ludia maju zobrazenie kazdy ine a tym padom aj ich export je iny. Pokial by si to museli prerabat podla toho ako je to presne v DB, by pre niekoho nemuselo byt priechodne a tym padom by to stale bolo tak, ako je to teraz, na mne. :)
Myslel som, ze by som sa toho mohol zbavit a updatovat by si to mohol kazdy, kedy chcel a tym padom by boli data vzdy aktualne, podla toho, kto to tam naposledy updatoval.

Cakal som, ze to bude jednoduche zobrat CSV , nacitat a naimportovat len tie Stlpce, ktore by boli preddefinovane, bud na tvrdo alebo podla toho, co ukaze Describe. Vypada, ze tak lahko sa toto neda dostat.
anonym_
Profil *
Andrej.B:
Pokud jsou ta záhlaví přesně definovaná, tak si v PHP projdeš první řádek, zjistíš si indexy inkriminovaných polí a pak při procházení dalších řádků budeš pracovat s těmi indexy (sloupci), které máš z toho prvního řádku v pořadí, v jakém potřebuješ.

Těžké na realizaci to není, jen je to... hodně vratké řešení, které se ti rozsype při první změně kdekoliv.
Kajman
Profil
Nebo si domluvte export ze systému pro robota, který bude mít sloupce vždy stejné. Pak můžete dělat pravidelně automatický export a import bez zásahu uživatele.

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:

0