Autor | Zpráva | ||
---|---|---|---|
martin6541 Profil |
#1 · Zasláno: 24. 5. 2022, 17:41:24
Dobrý večer. Nejsem v SQL vůbec zběhlý. Proto mě zajímá, jestli existuje nějaký "SQL builder" pro zjednodušení práce.
Potřebuji kopírovat produkty z jednoho eshopu na jiný a při tom ideálně překládat do jiného jazyka. Dělám to pomocí REPLACE. Celkem v pohodě... ale když si chci pro sadu produktů připravit překlady pro 50 často používaných polí, mám už trochu problém. Potřebuji tedy něco, co mi ulehčí práci. Výsledkem by mělo být něco jako: REPLACE (REPLACE (REPLACE([CSV_COL(21)],'jedna','1'),'dva','2'),'tři','3'); |
||
Kajman Profil |
#2 · Zasláno: 24. 5. 2022, 18:15:18
Můžete si udělat překladovou tabulku. Tu by pak používala uložená funkce (pokud ji Váš databázový systém podporuje), která udělá postupně tolik replaců, kolik je tam řádků překladů. Pak stačí
muj_prekladac([CSV_COL(21)]) Databázové nástroje existují, některé pro mysql a pár univerzálních je zmíněných ve starším vlákně Program na správu databází MySQL |
||
martin6541 Profil |
Kajman:
„Můžete si udělat překladovou tabulku.“ Umíte mi říct trochu detailněji, jak toto myslíte? Děkuji. Mi by úplně stačilo, kdybych mohl jeden replace pro jeden výraz mít na jednom řádku. Pak bych takových řádků měl tolik, kolik potřebuju přeložit slov. Ale to zžejmě nejde, že? REPLACE([CSV_COL(20)],'Specifikace','Špecifikácia'), REPLACE([CSV_COL(20)],'Prohlášení','Prehlásenie'), REPLACE([CSV_COL(20)],'Černá','Čierna'); |
||
Kajman Profil |
#4 · Zasláno: 25. 5. 2022, 06:48:11
Jakou databázi používáte?
|
||
martin6541 Profil |
#5 · Zasláno: 25. 5. 2022, 07:18:15
Kajman:
„Jakou databázi používáte?“ mysql |
||
Kajman Profil |
#6 · Zasláno: 25. 5. 2022, 09:29:36
martin6541:
„Umíte mi říct trochu detailněji, jak toto myslíte?“ Překladovou tabulkou myslím normální databázovou tabulku, např. CREATE TABLE `preklady` ( `zjazykadojazyka` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL, `original` varchar(2000) COLLATE utf8mb4_unicode_ci NOT NULL, `preklad` varchar(2000) COLLATE utf8mb4_unicode_ci NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; INSERT INTO `preklady` (`zjazykadojazyka`, `original`, `preklad`) VALUES ('cs-sk', 'Specifikace', 'Špecifikácia'), ('cs-sk', 'Prohlášení', 'Prehlásenie'), ('cs-sk', 'Černá', 'Čierna'); Pak je možné naprogramovat vlastní funkci v té databázi, např. DELIMITER ;; DROP FUNCTION IF EXISTS `muj_prekladac`;; CREATE FUNCTION `muj_prekladac`(`p_zjazykadojazyka` varchar(20), `p_retezec` varchar(2000)) RETURNS varchar(2000) CHARSET utf8mb4 BEGIN DECLARE v_done INT DEFAULT FALSE; DECLARE v_original, v_preklad VARCHAR(2000); DECLARE c_preklady CURSOR FOR SELECT original, preklad FROM preklady WHERE zjazykadojazyka = p_zjazykadojazyka; DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = TRUE; OPEN c_preklady ; read_loop: LOOP FETCH c_preklady INTO v_original, v_preklad; IF v_done THEN LEAVE read_loop; END IF; SET p_retezec = replace(p_retezec, v_original, v_preklad); END LOOP; CLOSE c_preklady; RETURN p_retezec; END;; DELIMITER ; Tu vlastní funkci můžete pak používat v dotazech a ona udělá tolik replaců, kolik tam je odpovídajícíh řádků. Např. SELECT muj_prekladac('cs-sk','Specifikace je Černá') |
||
martin6541 Profil |
#7 · Zasláno: 25. 5. 2022, 10:03:28
To vypadá zajímavě. Moc děkuji :)
|
||
Časová prodleva: 2 roky
|
0