Ja, du kan göra det i några steg:
Först Skapa en temporär mellanställningstabell (kan kalla den import
) med en kolumn som innehåller rader som rader i källdatafilen
CREATE TABLE `import` (
`line` varchar(512) DEFAULT NULL
);
och ladda data från filen till tabellen
LOAD DATA INFILE '/path/to/your/file.txt'
INTO TABLE import
FIELDS TERMINATED BY '\n'
LINES TERMINATED BY '\n'
Andra Förutsatt att du har en måltabell (låt oss kalla den words
). ) som ser ut ungefär så här
CREATE TABLE `words` (
`word` varchar(64) DEFAULT NULL
);
vi kan dela upp varje rad i ord och infoga dem i words
tabell med en fråga
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
OBS:
- antagandet är att dina ord separeras exakt med ett mellanslag
- den här frågan delar upp till 100 ord. Om du behöver mer eller mindre kan du justera en gräns genom att redigera den inre underfrågan eller om du importerar regelbundet än att överväga att använda en beständig tally(tal)-tabell istället.
Tredje Släpp eller trunkera (om du kommer att använda den igen för att importera fler filer) mellanställningstabellen
DROP TABLE import;
Här är SQLFiddle demo som visar steg två.