Autor | Zpráva | ||
---|---|---|---|
Andrej.B Profil |
#1 · Zasláno: 21. 9. 2022, 10:43:19
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: 1$sql = "DESCRIBE plan"; $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: 1$num = count($getData); $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 |
#2 · Zasláno: 21. 9. 2022, 13:08:02
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 * |
#3 · Zasláno: 21. 9. 2022, 13:28:14
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 |
#4 · Zasláno: 21. 9. 2022, 14:10:03
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 * |
#5 · Zasláno: 21. 9. 2022, 16:17:11
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 |
#6 · Zasláno: 21. 9. 2022, 18:33:12
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.
|
||
Časová prodleva: 3 roky
|
Toto vlákno je staré, již dlouho do něj nikdo nepřispíval.
Informace a odkazy zde uváděné už nemusejí být aktuální. Nechcete-li řešit zde uvedenou konkrétní otázku, založte si vlastní vlákno, nepište do tohoto. Vložíte-li sem nyní příspěvek, upoutáte pozornost mnoha lidí a někteří z nich si jen kvůli vám přečtou i všechny předcházející příspěvky. Předpokládáte-li, že váš text skutečně bude hodnotný, stiskněte následující tlačítko:
Běda vám, jestli to bude blábol.
0