Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Обновление из CSV файла в базу данных MySQL
shonny  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 6
Пользователь №: 43574
На форуме: 8 месяцев, 12 дней
Карма:




Здравствуйте. Вопрос такой, таблица в базе данных обновляется все хорошо, только как сделать так, чтобы обновлялись только те строки, которые были изменены? То есть, допустим если у меня изменились строки в поле MAC, то обновить все поля в таблице базы данных, где они были изменены.
$GLOBALS['link'] = mysqli_connect("localhost", "user", "passwd", "infoip");
$path = 'update';
$dir2 = opendir ("$path");
$i = 0;
while (false !== ($file2 = readdir($dir2))){
if($file2 != "." && $file2 != ".."){
if (strpos($file2, '.csv',1) ) {
$i++;
}
if ( substr($file2, 0, strpos($file2, '.csv',1) ) ) {
$res_strup = substr($file2, 0, strpos($file2, '.csv',1) );
$res_str2 = str_replace( "_" , "/" ,$res_strup);
$query2 = "SELECT net FROM `name_net`";
$resnet2 = mysqli_query( $GLOBALS['link'], $query2 );
if (($handle = fopen("update/".$file2, "r")) !== FALSE){
fgetcsv($handle, 1000, ",");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE){
$num = count($data);
$row++;
$query_up = "UPDATE `".$res_str2."` SET Ping = '$data[1]', Hostname = '$data[2]', Ports = '$data[3]', Mac = '$data[4]', date = '".date('Y-m-d H:i')."' WHERE IP = '$data[0]'";
$resaddnet2 = mysqli_query($GLOBALS['link'], $query_up );
if ($resaddnet2) {
echo "Описание сети ".str_replace ( "_" , "/" , $res_strup )." успешно добавлено! </br>";
}
else {echo "Описание сети ".str_replace ( "_" , "/" , $res_strup )." не добавлено! </br>";}
}

fclose($handle);
}
}
}
}
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Ron  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1317
Пользователь №: 41686
На форуме: 1 год, 11 месяцев, 12 дней
Карма: 24




Чего? Цель-то какая? Снизить нагрузку или что?






--------------------
5.11.2017
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
shonny  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 6
Пользователь №: 43574
На форуме: 8 месяцев, 12 дней
Карма:




Цитата (Ron @ 29.11.2016 - 22:26)


Дело в том, что у меня сейчас 3 таблицы, в каждом 255 строк. Чтобы обновить все строки в этих таблицах, это занимает некоторое время. Цель уменьшить время обработки, путем обновления только тех строк, которые были изменены. В данном случае было выявлено, что при изменении поля MAC, изменятся и другие поля. Вопрос как мне обновить эти измененные строки?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
inpost  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Помагите Здесь живу!!!
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 22932
Пользователь №: 20039
На форуме: 7 лет, 7 месяцев, 13 дней
Карма: 608




shonny
UPDATE займет время, так же как если ты будешь использовать SELECT для проверки.
255 строк - это ОЧЕНЬ МАЛО, менее секунды должно быть подобное в mysql.


--------------------
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Ron  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1317
Пользователь №: 41686
На форуме: 1 год, 11 месяцев, 12 дней
Карма: 24




Цитата (shonny @ 30.11.2016 - 19:01)
Дело в том, что у меня сейчас 3 таблицы, в каждом 255 строк.

Они у тебя различной структуры что ли? =)

При обновлении по CSV файлу, самым оптимальным вариантом будет записывать блоками данные во временную таблицу и делать UPDATE через JOIN, возможно еще со вложенным SELECT, к тому же. А там по ситуации, либо всё обновлять, либо только то, что поменялось - добавить соответствующее условие в WHERE - если нужно (не для оптимизации).

Таким образом, вместо сотен запросов будет в размер блока меньше. Если блок, например, из 100 строк - значит в 100 раз. Что существенно сократит время обработки. В этом секрет успеха - сокращение кол-ва запросов! Понял? =)

Цитата (inpost @ 30.11.2016 - 19:45)
255 строк - это ОЧЕНЬ МАЛО, менее секунды должно быть подобное в mysql.

Кто сказал что в CSV файле 255 строк? Может быть там их тысячи, тогда полная задница с производительностью поджидает. Тем более речь о 3-х таблицах почему-то, хотя по коду их не видно.

shonny, расскажи нам, чего это такое? Похоже на информацию об игровых серверах, но тогда причем тут MAC?

P.s. Что не смог загуглить из вышесказанного спрашивай, подскажем нужные слова. wink.gif

Это сообщение отредактировал Ron - 30.11.2016 - 20:56


--------------------
5.11.2017
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
inpost  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Помагите Здесь живу!!!
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 22932
Пользователь №: 20039
На форуме: 7 лет, 7 месяцев, 13 дней
Карма: 608




Ron
Цитата
Дело в том, что у меня сейчас 3 таблицы, в каждом 255 строк


--------------------
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса