Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Исключить дубли при добавлении в бд из txt

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
leshiy
Отправлено: 08 Августа, 2020 - 15:18:34
Post Id


Частый гость


Покинул форум
Сообщений всего: 188
Дата рег-ции: Июнь 2008  


Помог: 0 раз(а)




Как исключить построчную запись дублей в бд из txt.
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.     $text = fopen("M:/111.txt", "r");
  4.     if ($text) {
  5.         while (($buffer = fgets($text)) !== false) {
  6.     $sql="SELECT theme FROM comment WHERE theme='$buffer'";$result=mysqli_query($db,$sql);$a=mysqli_num_rows($result);
  7.     if($a>0){echo 'ok'.$a;
  8.     }else{
  9.     $resultloc = "INSERT INTO comment (theme) VALUES ('$buffer')";$res=mysqli_query($db,$resultloc);if($resultloc==true){echo $buffer.'-yes<br>';}else{echo 'net';}
  10.         }}
  11.     }
  12.     fclose($text);
  13. ?>

записывает все и дубли и нет.
 
 Top
LIME
Отправлено: 08 Августа, 2020 - 19:56:45
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




code style конечно у тебя огнище - читается на одном дыхании)) а че не все вообще в строчку?)
все вроде правильно хоть и кривенько
в смысле что мысль понятна и как-то реализована, но... возможны рэйсы
то есть могут выполняться параллельно два процесса
и тогда если второй запишет между проверкой и записью первого, то появится дубль
я только такую возможность тут вижу - это могет быть?
тут есть надежный способ через уникальный индекс на theme
его итак надо бы добавить потому как через него поиск идет, и лучше его сделать уникальным
тогда просто не получится добавить дубль
если надо чтобы не генерилась ошибка на стороне мскл - можно "INSERT IGNORE ..."

а вообще должно бы работать
как проверяешь результат? в бд смотришь что записалось? примеры строк с дублями? может они там уже были?
 
 Top
leshiy
Отправлено: 08 Августа, 2020 - 21:34:18
Post Id


Частый гость


Покинул форум
Сообщений всего: 188
Дата рег-ции: Июнь 2008  


Помог: 0 раз(а)




проверял так:
в бд есть слова
id theme
1 дерево
2 стол
3 кратер
а в txt
поле
смех
кратер
в итоге в бд получается
id theme
1 дерево
2 стол
3 кратер
4 поле
5 смех
6 кратер

два кратера
 
 Top
LIME
Отправлено: 09 Августа, 2020 - 03:28:04
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




даже проверил
все работает
ты или не там и не то смотришь, или изменение не залил на сервер, или (скорее всего) оно тебе вообще не надо с 2008
 
 Top
leshiy
Отправлено: 09 Августа, 2020 - 11:21:22
Post Id


Частый гость


Покинул форум
Сообщений всего: 188
Дата рег-ции: Июнь 2008  


Помог: 0 раз(а)




PHP:
скопировать код в буфер обмена
  1. $text = fopen("M:/111.txt", "r");
  2.     if ($text) {
  3.         while (($buffer = fgets($text)) !== false) {
  4.     $sql="SELECT theme FROM comment WHERE theme='$buffer'";
  5.     $result=mysqli_query($db,$sql);$a=mysqli_num_rows($result);
  6.     if($a>0){echo 'ok'.$a;//если все работает правильно то здесь должно выводится: ok1.Ведь так?
  7.     }else{
  8.     //$resultloc = "INSERT INTO comment (theme) VALUES ('$buffer')";$res=mysqli_query($db,$resultloc);if($resultloc==true){echo $buffer.'-yes<br>';}else{echo 'net';}
  9.         }}
  10.     }
  11.     fclose($text);
  12.    

(Отредактировано автором: 09 Августа, 2020 - 11:53:30)

 
 Top
LIME
Отправлено: 09 Августа, 2020 - 13:34:09
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




должно и у меня выводится
(Добавление)
PHP:
скопировать код в буфер обмена
  1. echo $sql;// и вручную проверять выполнение в бд
 
 Top
leshiy
Отправлено: 09 Августа, 2020 - 15:53:56
Post Id


Частый гость


Покинул форум
Сообщений всего: 188
Дата рег-ции: Июнь 2008  


Помог: 0 раз(а)




работает только с одиночными словами, а вот типа:
зеленое дерево
рабочий день
не работает
 
 Top
LIME
Отправлено: 09 Августа, 2020 - 17:00:47
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




а "дерево" и "зеленое дерево" это считаем дублями?
(Добавление)
да пофиг
мне надоело
 
 Top
leshiy
Отправлено: 09 Августа, 2020 - 19:07:58
Post Id


Частый гость


Покинул форум
Сообщений всего: 188
Дата рег-ции: Июнь 2008  


Помог: 0 раз(а)




LIME пишет:
а "дерево" и "зеленое дерево" это считаем дублями?
(Добавление)
да пофиг
мне надоело

Все разобрался.
PHP:
скопировать код в буфер обмена
  1. preg_match("/^.*\n/Uis", $buffer , $title_preg);
  2. $buf =trim( $title_preg[0] );

Спасибо за участие!
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB