Нужно перенести данные из текстового файла в Mysql

dast

Новичок
Нужно перенести данные из текстового файла в Mysql

Помогите пожалуйста со скриптом:

У меня есть текстовый файл со следующим содержанием:

1; comps; urls; rubl;
2; cosps; ufld; dudl;
3; cssps; udlc; dddg;

У меня есть база данных в Mysql:
Id | name | ru | us

Моя задача записать данные из этого файла в базу данных.

Подскажите плиз сам цикл разбиение этого файла на масивы? Да и забыл сказать что новая строка в файле это новая строка в базе.

Я понимаю что разграничителем на сектора тут будет ; но ни как не могу написать этот цикл. Возникают трудности как заставить цикл переходить на новую строку с новым циклом повторения…
 

Фанат

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

dast

Новичок
да но дело в том что количество этих строк неизвестно их может быть хоть 1000, на всех циклов не наделаешся...
С mysql я давно работаю... может кто то напишит для примера... ?

Да мне не надо ни чего пока писать в базу, хотябы подскажите сам процес этого цикла... в php.
 

Фанат

oncle terrible
Команда форума
дело в том что количество этих строк неизвестно их может быть хоть 1000, на всех циклов не наделаешся...
а зачем делать на всех?
я неясно написал?
располагаешь один цикл внутри другого
С mysql я давно работаю...
это ты кчему написал?
может кто то напишит для примера...
может, кто-то перестанет клянчить готовый код, а попробует включить голову?
 

dast

Новичок
svetasmirnova спасибо большое... единственный кто меня понял...

Фанат - ты просто не понял понормальному, я не могу написать сам цикл! я не знаю какими символами обозначаються переход на новую строку...

И прошу ни в тему ни высказываться, я не спрашиваю как можно это сделать подругому, мне нужент только простой цикл!!!!!!!!!
 

zarus

Хитрожопый макак
Можно я свои 5 копеек добавлю. Тоже вставала такая задача.

Если структура файла в точности повторяется структуру таблицы, в которую этот файл надо загрузить, то лучше воспользоваться командой
[sql]
LOAD DATA INFILE
'путь/к/файлу/файл'
INTO TABLE
'имя_таблицы'
FIELDS TERMINATED BY
'разделитель_полей' -- обычные значения - \t (табуляция) ; или |
STRINGS TERMINATED BY
'разделитель_строк' - \n , \r\n , \r и другие
[/sql]
За точность написания не ручаюсь - но информацию по функциям можно посмотреть на sql.com

Правда, есть заморочки с файлами в UTF-кодировке - так как в них в начале файла идут 3 символа (я в этом не разбираюсь, для чего они там нужны). Проблема в том, что большинство редакторов их не отображают, и соответственно, удалить символы нельзя. Вместе с тем, MySQL эти 3 символа "видит" и считает инструкцией и, соответственно, вылетает с ошибкой.
 

svetasmirnova

маленький монстрик
так как в них в начале файла идут 3 символа (я в этом не разбираюсь, для чего они там нужны). Проблема в том, что большинство редакторов их не отображают, и соответственно, удалить символы нельзя
Это т.н. BOM. Их видит (=> удаляет/добавляет) бесплатный и легковесный Notepad2 (http://www.flos-freeware.ch/)
 

zarus

Хитрожопый макак
Автор оригинала: svetasmirnova
Это т.н. BOM. Их видит (=> удаляет/добавляет) бесплатный и легковесный Notepad2 (http://www.flos-freeware.ch/)
О, спасибо, у меня Notepad++ и я видел в опциях кодировки "UTF w/o BOM", чем и не премину воспользоваться.
Спасибо еще раз!
 

dast

Новичок
лично меня устроил такой вариант:
PHP:
<?
include "base.php";

$str_sql_query = "SELECT id FROM price ";
$result = mysql_query ($str_sql_query, $link);
$rows=mysql_num_rows($result);

$row = 1;
$handle = fopen("test.csv", "r");
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
   $num = count($data);
   $id = $rows + 1;
   $row++;
   for ($c=0; $c < $num; $c++) {
	 $str_sql_query = "INSERT INTO price (id, name, ru, us, number) VALUES ('$id', '$data[1]', '$data[2]', '$data[3]', '$number')";
	 mysql_query($str_sql_query, $link);
   }
}
fclose($handle);

?>
Но возникает другой вопрос: строк будет около 2000 - это будет что то тпа каталога продукции, вывод данных будет осущевстляться через поиск по базе что типа $number = 1 выводим все строки с этим значением... строк впринципе будет не много в одном запросе... около 10-50 будет ли это сильно загружать сервер при поиске? и какой командой лкчьше воспользоваться что бы быстрее работала?
 

Фанат

oncle terrible
Команда форума
dast
Фанат - ты просто не понял понормальному, я не могу написать сам цикл! я не знаю какими символами обозначаються переход на новую строку...
А почему ты это не написал?
Вот написал бы - и претензий бы к тебе не было бы.
прошу ни в тему ни высказываться
ты не дорос ещё судить - что в тему, а что не в тему.
Так что лучше помалкивай.
Есть у тебя вопрос - вот его и обсуждай. А истерик никаких устраиват не надо.
И сократи количество восклицательных знаков.
И мои замечания, разумеется, тоже обсуждать не надо. Их надо просто принять к исполнению.

svetasmirnova
Твой ответ ему во вред.
Это удобная функция. Да, она решает его проблему. Ту, которая озвучена ЯВНО. Но есть ещё одна. Он не понимает, что такое вложенный цикл, и как обозначается перевод строк.
И как не понимал - так до сих пор и не понимает.
И, на мой взгляд - эти знания гораздо важнее, чем очередной костыль из арсенала пхп.

dast
по поводу твоего кода
у Id должен быть параметр autoincrement
а свои SELECT id FROM price и $id = $rows + 1; срочно сотри, пока никто не видел.

"другой вопрос" надо иллюстрировать кодом.
Спрашиваешь про поиск - пиши код с поиском.

-~{}~ 21.05.06 11:11:

И ещё.
воздержись, пожалуйста, от написания ответов в другие топики.
Твой уровень знаний явно для этого недостаточен, а так же для того, чтобы судить - какой ответ дельный, а какой - нет.
Заранее большое спасибо.
 
Сверху