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
Форумы портала PHP.SU :: Версия для печати :: Исключить дубли при добавлении в бд из txt
Форумы портала PHP.SU » » Вопросы новичков » Исключить дубли при добавлении в бд из txt

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

1. leshiy - 08 Августа, 2020 - 15:18:34 - перейти к сообщению
Как исключить построчную запись дублей в бд из 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. ?>

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

а вообще должно бы работать
как проверяешь результат? в бд смотришь что записалось? примеры строк с дублями? может они там уже были?
3. leshiy - 08 Августа, 2020 - 21:34:18 - перейти к сообщению
проверял так:
в бд есть слова
id theme
1 дерево
2 стол
3 кратер
а в txt
поле
смех
кратер
в итоге в бд получается
id theme
1 дерево
2 стол
3 кратер
4 поле
5 смех
6 кратер

два кратера
4. LIME - 09 Августа, 2020 - 03:28:04 - перейти к сообщению
даже проверил
все работает
ты или не там и не то смотришь, или изменение не залил на сервер, или (скорее всего) оно тебе вообще не надо с 2008
5. leshiy - 09 Августа, 2020 - 11:21:22 - перейти к сообщению
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.    
6. LIME - 09 Августа, 2020 - 13:34:09 - перейти к сообщению
должно и у меня выводится
(Добавление)
PHP:
скопировать код в буфер обмена
  1. echo $sql;// и вручную проверять выполнение в бд
7. leshiy - 09 Августа, 2020 - 15:53:56 - перейти к сообщению
работает только с одиночными словами, а вот типа:
зеленое дерево
рабочий день
не работает
8. LIME - 09 Августа, 2020 - 17:00:47 - перейти к сообщению
а "дерево" и "зеленое дерево" это считаем дублями?
(Добавление)
да пофиг
мне надоело
9. leshiy - 09 Августа, 2020 - 19:07:58 - перейти к сообщению
LIME пишет:
а "дерево" и "зеленое дерево" это считаем дублями?
(Добавление)
да пофиг
мне надоело

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

Спасибо за участие!

 

Powered by ExBB FM 1.0 RC1