Ja, je kunt het in een paar stappen doen:
Eerste Maak een tijdelijke staging-tabel (laten we het import
noemen) ) met één kolom die regels bevat als rijen van het brongegevensbestand
CREATE TABLE `import` (
`line` varchar(512) DEFAULT NULL
);
en laad gegevens uit het bestand in de tabel
LOAD DATA INFILE '/path/to/your/file.txt'
INTO TABLE import
FIELDS TERMINATED BY '\n'
LINES TERMINATED BY '\n'
Tweede Ervan uitgaande dat je een doeltabel hebt (laten we het words
noemen) ) dat er ongeveer zo uitziet
CREATE TABLE `words` (
`word` varchar(64) DEFAULT NULL
);
we kunnen elke regel in woorden splitsen en invoegen in words
tabel met een vraag
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
OPMERKING:
- aanname is dat je woorden precies gescheiden zijn door één spatie
- deze zoekopdracht wordt opgesplitst in maximaal 100 woorden. Als je meer of minder nodig hebt, kun je een limiet aanpassen door de binnenste subquery te bewerken of als je regelmatig importeert, overweeg dan om in plaats daarvan een persistente tally(nummers)-tabel te gebruiken.
Derde Zet de staging-tabel neer of kap deze af (als u deze opnieuw wilt gebruiken om meer bestanden te importeren)
DROP TABLE import;
Hier is SQLFiddle demo die stap twee laat zien.