Загрузка выборочных полей из текстового файла

Veosys

Новичок
Загрузка выборочных полей из текстового файла

Подскажите, plz, как из текстового файла загрузить с помощью LOAD DATA INFILE не все поля в каждой строке, а выборочно. Т.е у меня в текстовом файле 25 полей, а выбрать мне нужно пять из них в каждой строке. Можно ли как то исхитриться сделать это сразу, или же все-таки надо сначала средствами PHP отпарсить файл убрав лишние поля, а уже потом из него грузить? Или есть еще какой либо метод решить данную задачу?
 

Апельсин

Оранжевое создание
При помощи только LOAD DATA INFILE - никак.

можно еще загрузить весь файл во временную таблицу, а потом сделать INSERT SELECT в нужную таблицу с указанием нужных столбцов.
 

Veosys

Новичок
Я в общем в итоге так и сделал. Только почему-то забыл про возможность вставлять прямо из таблицы в таблицу и делал промежуточную выгрузку в текстовый файл. Так что спасибо за напоминание ;)
 

Фанат

oncle terrible
Команда форума
в клиентах а-ля EMS или phpmyadmin эта операция делается на порядок сложнее
чем написать два простых запроса.

не говоря уэе о том, что здесь, вообще-то, общаются, по ольшей части, программисты. Которые пишут программы. программы, которые могут исполняться и без участия программиста.
а не пользователи, которые только и умеют тыкать в кнопочки.
и только по факту личного присутствия.
 

Veosys

Новичок
Да, речь шла именно о написании скрипта. А программками разными я и сам пользоваться умею ;) Хотелось вот уточнить только: по времени быстрее будет перевставлять данные с помощью INSERT SELECT, или выгружая во временный файл и уже из него загружая с помощью LOAD DATA INFILE? Ведь по идее LOAD DATA INFILE используют именно загрузки для больших объемов данных. А у меня текстовые файлы будут мегобайт по 5-8. Задаю вопрос, поскольку эксперимент провести пока невозможно из-за отсутствия исходного файла с данными. Есть только его маленький фрагментик.
 

baev

‹°°¬•
Команда форума
речь шла именно о написании скрипта. А программками разными я и сам пользоваться умею
По личному опыту:
в HomeSite есть опция «расширенные поиск и замена» — при «поиске и замене» можно использовать регулярные выражения.

И ничто не мешает эти выражения потом вставить в скрипт.

(В "php expert editor"е тоже есть нечто похожее. Но мне как-то удобнее всё это в ХоумСайте делать...)
 

Veosys

Новичок
Ну в общем с задачей выкидывания лишних полей я справился по методу, подсказанному Апельсин
Была еще задача замены в одном из нужных полей десятичной запятой на точку. Во временной таблице все поля текстовые , а вот в итоговой это поле арифметического типа и запятая на месте разделителя целой и дробной части не катит. Сейчас я решаю эту задачу делая SELECT из временной таблицы, затем замену в цикле запятой на точку с помощью str_replace и затем, соответственно, UPDATE. Хотелось бы узнать мнение уважаемых знатоков - оптимальный ли это метод или есть побыстрее и попроще. Единственной что еще уточню - размер исходного файла метров 40, так что строк там немеряно.
 
Ну ты и извращенец. Сделай проще

INSERT INTO
...
SELECT
REPLACE(field1,',','.')
...

Будет раз в 100 быстрей.
 

Veosys

Новичок
shtogrin
Спасибо за совет. Работат. В сто не в сто, но в несколько раз быстрее точно :)

Я не извращенец, просто имеет место некоторая нехватка знаний и опыта ;) Для их пополнения сюда и обращаюсь. Документацию всегда читаю, но иногда для БЫСТРОГО решения задачи нужна подсказка в каком ее (документации) разделе искать ответ на свой вопрос. Вот как в данном случае, например.
 
Сверху