Tak, możesz to zrobić w kilku krokach:
Pierwszy Utwórz tymczasową tabelę pomostową (nazwijmy ją import
) z jedną kolumną, która będzie zawierać wiersze jako wiersze źródłowego pliku danych
CREATE TABLE `import` (
`line` varchar(512) DEFAULT NULL
);
i załaduj dane z pliku do tabeli
LOAD DATA INFILE '/path/to/your/file.txt'
INTO TABLE import
FIELDS TERMINATED BY '\n'
LINES TERMINATED BY '\n'
Drugi Zakładając, że masz tabelę docelową (nazwijmy ją words
) wygląda mniej więcej tak
CREATE TABLE `words` (
`word` varchar(64) DEFAULT NULL
);
możemy podzielić każdą linię na słowa i wstawić je w words
tabela z zapytaniem
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
UWAGA:
- założenie jest takie, że słowa są oddzielone dokładnie jedną spacją
- to zapytanie podzieli do 100 słów. Jeśli potrzebujesz więcej lub mniej, możesz dostosować limit, edytując wewnętrzne podzapytanie lub jeśli regularnie importujesz, niż rozważ użycie utrwalonej tabeli tally (liczby).
Trzeci Upuść lub przytnij (jeśli użyjesz go ponownie, aby zaimportować więcej plików) tabelę pomostową
DROP TABLE import;
Oto SQLFiddle demo pokazujące krok drugi.