из текстового файла импортировать в поле существующей таблицы

Тема в разделе "Базы данных", создана пользователем seoboy, 28 фев 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. seoboy

    seoboy

    Регистр.:
    17 мар 2007
    Сообщения:
    165
    Симпатии:
    27
    подскажите как сделать. есть база base1 в ней таблица sait в ней несколько полей одно из них url содержит строки с уллами. есть текстовый файл,где каждый урл на отдельной строке. как можно загнать урлы в таблицу?
     
  2. Ins1ne

    Ins1ne Постоялец

    Регистр.:
    26 авг 2009
    Сообщения:
    89
    Симпатии:
    25
    PHP:
    <?php
    $host_base 
    'localhost';
    $user_base 'login';
    $base 'название базы';
    $password_base='password';

    function 
    db_connect($host,$user,$password,$base)
    {
      
    $result mysql_pconnect($host,$user,$password) or die ("<strong class='error'>Query failed : " mysql_error() . "</strong>");
      
    mysql_select_db($base) or die ("<strong class='error'>Query failed : " mysql_error() . "</strong>");
      return 
    $result;
    }
    db_connect($host_base,$user_base,$password_base,$base);

    $query="SET NAMES 'utf8'";
    $result mysql_query ($query)   or die ("<strong>Query failed </strong><br>line: ".__line__."<br>file: ".__file__."<br>error: ".mysql_error());



    $fp fopen('путь к файлу''r');
    if (!
    $fp) {
        echo 
    'Ошибка при открытии файла';
    }
    while (
    false !== ($char fgets($fp))) {
        
    $sql 'INSERT INTO `название таблицы`(`название поля куда заносить`) VALUES (\'' $char '\')';
        
    $res mysql_query($sql);
    }
    fclose($fp);
    как-то так)
     
    seoboy нравится это.
  3. stasdre

    stasdre Постоялец

    Регистр.:
    15 янв 2010
    Сообщения:
    125
    Симпатии:
    18
    Можешь попробывать URL закинуть в EXCEL и импортировать в базу(если конечно она у тебя изначально пустая)
     
  4. fima32

    fima32

    Регистр.:
    25 дек 2007
    Сообщения:
    201
    Симпатии:
    13
    Да не обязательно пустая, можно и UPDATE сделать
     
  5. seoboy

    seoboy

    Регистр.:
    17 мар 2007
    Сообщения:
    165
    Симпатии:
    27
    нет база не пустая
     
  6. djeklu

    djeklu Создатель

    Регистр.:
    12 янв 2007
    Сообщения:
    16
    Симпатии:
    0
    Смотря сколько строк в этом текстовом файле
    если строк пусть даже 1000, то в приведенном скрипте (пусть даже с mysql_pconnect()) у тебя базу будет насиловать эти тысячи запросов. а если строк больше?

    рекомендую (из опыта)
    1. или использовать родные возможности мускуля для загрузки файла: "load data CONCURRENT INFILE 'путь_к_файлу' INTO TABLE таблица"
    2. или пересобрать файл и создать один файл в котором будет 1000 строк типа:
    "
    INSERT INTO `название таблицы`(`название поля куда заносить`) VALUES ('урл1');
    INSERT INTO `название таблицы`(`название поля куда заносить`) VALUES ('урл2');
    "
    и уже этот файл выполнить(залить) одним махом
    поверьте мне - это в сотни раз быстрее выполнится.
     
  7. shvonder_85

    shvonder_85 Создатель

    Регистр.:
    3 май 2010
    Сообщения:
    12
    Симпатии:
    3
    из файла быстро загружает команда
    LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
    [REPLACE | IGNORE]
    INTO TABLE tbl_name
    [CHARACTER SET charset_name]
    [{FIELDS | COLUMNS}
    [TERMINATED BY 'string']
    [[OPTIONALLY] ENCLOSED BY 'char']
    [ESCAPED BY 'char']
    ]
    [LINES
    [STARTING BY 'string']
    [TERMINATED BY 'string']
    ]
    [IGNORE number LINES]
    [(col_name_or_user_var,...)]
    [SET col_name = expr,...]
     
  8. sage.scs

    sage.scs Создатель

    Регистр.:
    1 фев 2009
    Сообщения:
    10
    Симпатии:
    0
    да в excel проще всего сформировать запросы, копирнуть их и выполнить.
     
  9. Trostnik

    Trostnik Прохожие

    Замечание к приведенному Ins1ne коду.
    Список URL может содержать спецсимволы, что приведет к ошибке обработки.
    Для устранения такого рода ошибок полезно обрабатывать входящие символьные строки функцией addslashes()
    Соответственно стоит вместо
    while (false !== ($char = fgets($fp))) {
    написать
    while (false !== ($char = addslashes(fgets($fp)))) {
     
  10. Otis22

    Otis22 Создатель

    Регистр.:
    13 фев 2009
    Сообщения:
    30
    Симпатии:
    9
    В екселе есть замечательная строковая функция СЦЕПИТЬ. Если нужно разово залить что то в базу я обычно пользуюсь ей. Схема такая вставляем урлы в первую колонку в екселе. Во второй колонке составляем формулу =СЦЕПИТЬ("INSERT INTO mytable(myfield) VALUES('";A1;"');"). КОпируете на все строки и всё. Единтсвенное если строк больше 10000 есть смысл повозится с булк инсертом.
     
Статус темы:
Закрыта.