Autor Zpráva
martin6541
Profil
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');
a pokračovat podle toho, kolik překladů připravím.
Kajman
Profil
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
Jakou databázi používáte?
martin6541
Profil
Kajman:
Jakou databázi používáte?
mysql
Kajman
Profil
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
To vypadá zajímavě. Moc děkuji :)

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