Autor Zpráva
martin6541
Profil
Dobrý den.
Řeším problém s importem dat do eshopu.
Mám program na import/export produktů mezi eshopy na RS Joomla a Virtuemart.
Mám vyexportovaný soubor csv z českého eshopu a chci importovat do slovenského eshopu. Program mi umožňuje při exportu pomocí dotazů ovlivnit jednotlivé hodnoty. Například přepočet hodnot z czk na euro a podobně.
prnt.sc/M1w_hQ-CS0SE

Narážím ale na problém s vlastními poli.... ty používám pro varianty produktů
1. musím řešit název pole, který musím překládat, aby se správně napároval český název pole na slovenský (pole jsou dopředu vytvořena)
2. musím řešit cenu
3. a to vše je komplikováno tím, že když je víc než jedno pole, tak je zápis v jedné buňce oddělen |

Příklad exportu z CZ:
^Custom Field Name^;^Custom Field Value^;^Custom Field Price^
^Barva|Barva|Barva|Délka|Délka^;^Žlutá|Černá|Stříbrná|10 cm| 20 cm^;^0|0|100|0|200^;

Importovat do SK potřebuji takto:
^Custom Field Name^;^Custom Field Value^;^Custom Field Price^
^Farba|Farba|Farba|Dĺžka|Dĺžka^;^Žltá|Čierna|Strieborná|10 cm| 20 cm^;^0|0|4|0|8^;

V programu umím do buňky nastavit místo importu hodnoty nějakou SQL funkci...
prnt.sc/M-Qw9q2aX2Bn
Když je hodnota buňky jen číslo s cenou, tak stačí například toto:
[CSV_COL(12)]/25
kdy vlastně určím, že hodnotu ve sloupci 12 vydělím 25

Jak ale použít REPLACE?
NÁPOVĚDA PROGRAMU MI ŘÍKÁ TOTO:

Syntax:
REPLACE [LOW_PRIORITY | DELAYED]
    [INTO] tbl_name [(col_name,...)]
    {VALUES | VALUE} ({expr | DEFAULT},...),(...),...

Or:

REPLACE [LOW_PRIORITY | DELAYED]
    [INTO] tbl_name
    SET col_name={expr | DEFAULT}, ...

Or:

REPLACE [LOW_PRIORITY | DELAYED]
    [INTO] tbl_name [(col_name,...)]
    SELECT ...

REPLACE works exactly like INSERT, except that if an old row in the
table has the same value as a new row for a PRIMARY KEY or a UNIQUE
index, the old row is deleted before the new row is inserted. See [HELP
INSERT].

REPLACE is a MySQL extension to the SQL standard. It either inserts, or
deletes and inserts. For another MySQL extension to standard SQL ---
that either inserts or updates --- see
http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html.

Note that unless the table has a PRIMARY KEY or UNIQUE index, using a
REPLACE statement makes no sense. It becomes equivalent to INSERT,
because there is no index to be used to determine whether a new row
duplicates another.

Values for all columns are taken from the values specified in the
REPLACE statement. Any missing columns are set to their default values,
just as happens for INSERT. You cannot refer to values from the current
row and use them in the new row. If you use an assignment such as SET
col_name = col_name + 1, the reference to the column name on the right
hand side is treated as DEFAULT(col_name), so the assignment is
equivalent to SET col_name = DEFAULT(col_name) + 1.

To use REPLACE, you must have both the INSERT and DELETE privileges for
the table.

URL: http://dev.mysql.com/doc/refman/5.1/en/replace.html

Uměl by mi někdo pomoci vytvořit dotaz tak, abych mohl alespoň použít nějaký list překladů? nejedná se o velký eshop, takže bych uměl vytvořit list, kde dám seznam původních českých a k tomu ekvivalent ve slovenčině.
Něco jako tady: dev.mysql.com/doc/refman/5.1/en/replace.html

Myslím si, že s těma cenama asi nic dělat nepůjde...
Nebráním se placené pomoci.
Děkuji

PS: Pokud to nepůjde, je reálné použít PSPad a funkcí najít a nahradit přepisovat jednu hodnotu za druhou? Případně pohledat nějaký překladatelský soft, kde bych načetl csv a z předem připravené tabulky překladů těchto hodnot bych to přeložil... takový PSPad+ :)
Kajman
Profil
Vlastní pole by neměla být přímo u produktů, ale v jiné samostatné tabulce, kde bude k jednomu produktu např. 5 řádků. Tedy více csv souborů (podle počtu tabulek). Pak by šly úpravy snáze.

S touto spatlaninou se bude hůře pracovat. Pokud toužíte čistě po sql řešení, tak bych si asi udělal tabulku překladů a tu pak využil v ve vlastní funkci, která cyklem rozkouskuje pole díky znakům ^ | a v těch kouscích udělá náhrady (u cen bude jiná funkce na přepočet). Pro náhradu pak nesmíte používat příkaz replace na úpravu řádku, ale funkci replace nebo regexp_replace na úpravu řetězce.
martin6541
Profil
Kajman:
Vlastní pole by neměla být přímo u produktů, ale v jiné samostatné tabulce,
To je pravda. Dokonce to tak i eshop v databázi má. Ale v tom programu na správu to je zahrnuto takto.
Nakonec překlad si jsem v případě nouze udělat i přímo v souboru před importem. Ale ty ceny vidím jako beznadějný problém.
Kajman
Profil
martin6541:
Ale v tom programu na správu to je zahrnuto takto.

A nemá te program podporu jiných formátů? XML nebo JSON by mohl obsahovat strukturovaná data jednotlivých položek.
martin6541
Profil
Kajman:
A nemá te program podporu jiných formátů?
Má. Ale pouze pro import... exportovat data mohu jen do csv. Takže importovat mohu například xml feed dodavatele. Ale mezi mými eshopy pouze csv.
martin6541
Profil
Takže... pro nahrazování textů jsem se rozhodl nahrazovat v mezikroku... kdy po exportu z české verze pomocí předem připravovaného seznamu možností to přeložím a následně budu importovat produkt již se slovenskými názvy.
hor.cas.cz/hromadny-menic

Zbývá dořešit přepočet ceny.
Kajman
Profil
martin6541:
Zbývá dořešit přepočet ceny.

To vyřešíte dle [#2] - tedy rozkouskovat na jednotlivé ceny, ty vynásobit kurzovním koeficentem a zase to spojit do jednoho stringu. To si musíte naprogramovat.

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