Перенос данных из txt в mysql

G2
На сайте с 12.01.2013
Offline
36
4466

Помогите пожалуйста, делаю перенос данный из txt в базу, вот так:

LOAD DATA INFILE 'list.txt' INTO TABLE `table_brend` (`brends`)

база сосотоит из столбцов id и brends, но у меня после исполнения этого кода в поле id 1 пусто, а все остальные поля заполнены, то есть так:

id | brends

1

2 samsung

3 lg

4 htc

5 asus

как сделать так чтоб заполнение начиналось с первого id ?

Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#1

Может в самом файле первая строка пустая? Или кодировка "UTF-8 с BOM"

Подпись))
IL
На сайте с 20.04.2007
Offline
435
#2
gigs2:
как сделать так чтоб заполнение начиналось с первого id ?

В файле убрать перевод первой строки? Или BOM-символ?

Перед импортом..

Alter table_brend AUTO_INCREMENT =1

Или "IGNORE 1" добавить..

p.s. brAnd же..

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
G2
На сайте с 12.01.2013
Offline
36
#3

Спасибо Милованов Ю.С, нужно было поменять кодировку? но теперь возникла еще одна проблема, если я создам еще один столбец например bt_brends и захочу в него добавить данные, при этом столбец brends у меня будет заполнен, то новый столбец bt_brends начинает заполнятся не с первого id, а с конца id brends, вот так:

id | brends | bt_brends

1 lenovo

2 samsung

3 lg

4 htc

5 asus

6 ....................nord

7 ....................dex

8 ....................indesit

9.....................bosh

как сделать чтоб столбец bt_brends заполнялся сначала ?

(точки я поставил потому что здесь не работает пробел)

Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#4

попробуйте сбросить автоинкремент на 1


Alter table_brend AUTO_INCREMENT =1

Если не получится - то писать в доп.таблицу, а из нее уже потом читать и апдейтить записи в основной таблице.

G2
На сайте с 12.01.2013
Offline
36
#5

сделал так:

Alter brend AUTO_INCREMENT =1

LOAD DATA INFILE 'list.txt' INTO TABLE `brend` (`bt_brends`)

но мне выдает ошибку

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'brend AUTO_INCREMENT =1 LOAD DATA INFILE 'list.txt' INTO TABLE `brend` (`bt_brends`)' at line 1

Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#6

сорри, синдром копи-пасте

ALTER TABLE table_brend AUTO_INCREMENT =1

UPDATE:

Проверил тока что. Не будет он так работать. Будет добавлять новую строку.

Если под рукой есть ПХП, то можно это сделать так:


<?php
//Тут соединение с БД, выбор базы
if (1 == 1)//Если надо очистить таблицу
{
if ( mysql_query('truncate `brend`') )
{
echo 'Table brend is cleared<br/>';
}
}
else
{
echo mysql_error(), '<br/>';
}

$file1 = file('file1.txt');//Читаем в массив 1 файл
$file2 = file('file2.txt');//Читаем в массив 2 файл

foreach($file1 as $k=>$v)
{
$v1 = mysql_real_escape_string($v);
$v2 = mysql_real_escape_string($file2[$k]);
$sqls[] = "('$v1', '$v2')";
}
$sql = 'INSERT INTO `brend` (`brends`, `bt_brends`) VALUES ' .implode(', ', $sqls);
if (mysql_query($sql))
{
echo 'In table brend added ' .mysql_affected_rows() .' rows<br/>';
}
else
{
echo mysql_error(), '<br/>';
}
?>
G2
На сайте с 12.01.2013
Offline
36
#7

если прописать так:

ALTER TABLE table_brend AUTO_INCREMENT =1

LOAD DATA INFILE 'list.txt' INTO TABLE `table_brend` (`bt_brends`)

то выдает туже ошибку, а если сделать так, поставить точку с запятой:

ALTER TABLE table_brend AUTO_INCREMENT =1;

LOAD DATA INFILE 'list.txt' INTO TABLE `table_brend` (`bt_brends`)

то додает также само начиная с последнего id, а не сначала, может есть еще какой то способ ?

Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#8

Выше проапдейтил пост.

Если вариант с ПХП не подходит, то тогда такой вариант:

1 файл пишем в таблицу tbl1(id, value)


LOAD DATA INFILE 'list1.txt' INTO TABLE `tbl1` (`value`)

2 файл пишем в таблицу tbl2(id, value):


LOAD DATA INFILE 'list2.txt' INTO TABLE `tbl2` (`value`)

Ну и теперь из этих таблиц пишем в основную


INSERT INTO brend(`brends`, `bt_brends`)
SELECT t1.value, t2.value
FROM tbl1 as t1
LEFT JOIN tbl2 as t2
ON t1.id=t2.id

Код не тестил, но работать должен;)

G2
На сайте с 12.01.2013
Offline
36
#9

спасибо за помощь, я думал что это можно сделать как то по проще, а оказывается что нужно записывать в две таблицы, а потом переносить в третью. Но все равно спасибо.

Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#10

Это можно сделать 1 запросом. Но для этого нужно склеить 2 файла в 1.

телeвизор<delimiter>Samsung\r\n

холодильник<delimiter>Intesit\r\n

магнитофон<delimiter>Sony\r\n

Ну и в запросе LOAD DATA INFILE указать

LINES TERMINATED BY '\r\n' - разделитель между строками. В данном примере это виндоусовский разделитель

FIELDS TERMINATED BY '<delimiter>' - то что мы использовали в качестве разделителя значений

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий