Ano, můžete to udělat v několika krocích:
První Vytvořte dočasnou pracovní tabulku (nazvěme ji import
) s jedním sloupcem, který bude obsahovat řádky jako řádky zdrojového datového souboru
CREATE TABLE `import` (
`line` varchar(512) DEFAULT NULL
);
a načíst data ze souboru do tabulky
LOAD DATA INFILE '/path/to/your/file.txt'
INTO TABLE import
FIELDS TERMINATED BY '\n'
LINES TERMINATED BY '\n'
Za druhé Za předpokladu, že máte cílovou tabulku (nazvěme ji words
), která vypadá nějak takto
CREATE TABLE `words` (
`word` varchar(64) DEFAULT NULL
);
můžeme každý řádek rozdělit na slova a vložit je do words
tabulka s dotazem
INSERT INTO words (word)
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(line, ' ', n.n), ' ', -1) word
FROM import CROSS JOIN
(
SELECT a.N + b.N * 10 + 1 n
FROM
(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
ORDER BY n
) n
WHERE n.n <= 1 + (LENGTH(line) - LENGTH(REPLACE(line, ' ', '')))
ORDER BY n.n
POZNÁMKA:
- předpokládá se, že vaše slova jsou oddělena přesně jednou mezerou
- tento dotaz rozdělí až 100 slov. Pokud potřebujete více či méně, můžete upravit limit úpravou vnitřního poddotazu nebo pokud provádíte import pravidelně, zvažte místo toho použití tabulky trvalých záznamů (čísel).
Třetí Přetáhněte nebo zkraťte (pokud ji znovu použijete k importu více souborů) pracovní tabulku
DROP TABLE import;
Zde je SQLFiddle demo, které ukazuje druhý krok.