SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 01.06.2010 00:49:36

cyklop77
Участник
Зарегистрирован: 17.05.2010
Сообщений: 8

добавить в таблицу сотрудников email-ы

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

есть таблица `personal`, в которой существует поле для имени и поле для email. для email не заполнено.
есть csv-файл с именами и email-ми людей(я его обрабатываю при помощи PHP, значения имён и email-ов помещаю в массивы).
далее при помощи простоейшего php-кода я организую цикл по вышеуказанному массиву и при каждом проходе делаю запрос типа select к таблице `personal`. если select что-то возвращает, то есть есть совпадение имени из массива и из select-запроса, то делаю запрос типа update, который добавляет значение email-а в нужную ячейку таблицы `personal`.

вот код, если кому интересно


<?php
 
    $filecsv=file("emails.csv");
   
    foreach($filecsv as $key => $value)
    {
        $mass_n=explode(';', $value);
        $names[$key]=strtoupper($mass_n[0]);
        $emails[$key]=$mass_n[2];
    }

    foreach($names as $key => $value)
    {
       
        $names_format[$key]=str_replace(' ', '&nbsp;', $names[$key]);
       
        $q="select * from `personal` where `fio`='".$names_format[$key]."'";
        $r=mysql_query($q) or die(mysql_error());
        $res=mysql_fetch_assoc($r);
       
        $q2="update `personal` set `email`='".$emails[$key]."' where `fio`='".$names_format[$key]."'";
        $r=mysql_query($q2) or die(mysql_error());
    }
?>
 



как уже писал хотелось бы найти более удобное решение. а я подозреваю что оно существует...
заранее благодарен за ответы

Неактивен

 

#2 01.06.2010 22:21:22

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: добавить в таблицу сотрудников email-ы

а fio у вас поле уникальное? Спрашиваю, потому что в жизни это никакой не ключ, повторы более чем вероятны. Но судя по коду, либо у вас такого не бывает, либо вы это не учли и при одинаковых fio у вас всегда одинаковый email.

Но всё же если уникально, то я бы сделал так. Создаем временную таблицу temp_personal (можно с типом TEMPORARY, сама грохнется после обработки), делаем в нее LOAD DATA из csv-файла. После чего делаем update:



UPDATE personal, temp_personal
SET personal.email = temp_personal.email
WHERE personal.fio = temp_personal.fio

 


Если данных много, добавить индексы.

P.S. все же подумайте над уникальностью fio

Отредактированно Shopen (01.06.2010 22:21:39)

Неактивен

 

#3 02.06.2010 22:15:20

cyklop77
Участник
Зарегистрирован: 17.05.2010
Сообщений: 8

Re: добавить в таблицу сотрудников email-ы

спасибо, то что нужно

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson