За последние 24 часа нас посетили 22369 программистов и 1032 робота. Сейчас ищут 672 программиста ...

Скрипт читает из файла 2 столбца и сравнивает их со словами в БД

Тема в разделе "PHP и базы данных", создана пользователем Methodman, 15 фев 2020.

Метки:
  1. Methodman

    Methodman Активный пользователь

    С нами с:
    30 апр 2018
    Сообщения:
    10
    Симпатии:
    0
    Здравствуйте!
    Подскажите по скрипту, все вроде правильно, есть похожие скрипты они работают, этот подвисает(грузиться в браузере) и все. Задача скрипта считать имена команд и проверить есть ли они в таблице БД.

    Вот файл:

    'Instituto de Cordoba','Esgueira'
    'La Union','Vitoria W'
    'Ferro','Olivais W'
    'Penarol','Gdessa Barreiro W'
    'Malaysia Dragons','Natacao W'
    'Singapore Slingers','Guifoes W'

    Вот скрипт:

    PHP:
    1. <?php
    2.     ini_set('max_execution_time', 0);
    3.     ini_set('display_errors', true);
    4.     error_reporting(-1);
    5.  
    6.     $db = mysqli_connect("localhost", "root", "xxxxxx","scorechart");
    7.     mysqli_select_db($db,"scorechart");
    8.     mysqli_set_charset($db,'utf8');
    9.  
    10.  
    11.     $f = fopen("C:\Apache24\htdocs\Main2\List_Eng_Teams_Column.csv", "r");
    12.     while (!feof($f))
    13.         {
    14.           $arrM = explode(",",fgets($f));
    15.      
    16.             $query_select1 = "select * from tteam where team_eng  = $arrM[0]";
    17.             $query_select2 = "select * from tteam where team_eng  = $arrM[1]";
    18.        
    19.             $result1 = mysqli_query($db,$query_select1);
    20.             $result2 = mysqli_query($db,$query_select2);
    21.  
    22.  
    23.             $num_rows1 = mysqli_num_rows($result1);
    24.             if($num_rows1 == 0)
    25.                 {
    26.                     echo "<br>------------------<br>".'$num_rows = '.$num_rows1.'Команда не найдена!'.$arrM[0]."<br>------------------<br>";
    27.                 }
    28.             else
    29.                 {
    30.                     echo "<br>------------------<br>".'$num_rows = '.$num_rows1.'Команда найдена!'.$arrM[0]."<br>------------------<br>";
    31.                 }
    32.        
    33.             $num_rows2 = mysqli_num_rows($result2);
    34.             if($num_rows2 == 0)
    35.                 {
    36.                     echo "<br>------------------<br>".'$num_rows = '.$num_rows2.'Команда не найдена!'.$arrM[1]."<br>------------------<br>";
    37.                 }
    38.             else
    39.                 {
    40.                     echo "<br>------------------<br>".'$num_rows = '.$num_rows2.'Команда найдена!'.$arrM[1]."<br>------------------<br>";
    41.                 }
    42.         }
    43.     fclose($f);
    44.     mysqli_close($db);
    45. ?>
     
    #1 Methodman, 15 фев 2020
    Последнее редактирование: 15 фев 2020
  2. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @Methodman, всё, что можно было сделать неправильно в этом скрипте... сделано.
    Вы бы лучше подробнее описали саму задачу, например, что это за файл, почему два столбца и какова конечная цель этих "махинаций".
    На будущее: если запрос к базе данных внутри цикла (любого) , то 99% это неправильное решение.
     
  3. Methodman

    Methodman Активный пользователь

    С нами с:
    30 апр 2018
    Сообщения:
    10
    Симпатии:
    0
    Изначальная задача:

    Есть csv файл вида:
    'Instituto de Cordoba'
    'Esgueira'
    'La Union'
    'Vitoria W'
    'Ferro'
    'Olivais W'
    'Penarol'
    'Gdessa Barreiro W'
    'Malaysia Dragons'
    'Natacao W'
    'Singapore Slingers'
    'Guifoes W'

    В БД есть таблица tteam, в таблице есть поле team_eng с наименованиями команд как в csv файле.

    Задача такая:
    Взять строку из csv файла т.е. имя команды и найти ее в поле(столбце) team_eng таблицы tteam. Если команда найдена в столбце team_eng то вывести на экран что такая команда есть в таблице, если нету в столбце team_eng этой команды, то вывести на экран что такой команды из csv файла в столбце team_eng таблицы tteam нет.

    Так как у меня мало знаний в php я не смог сделать скрипт чтобы прочитать один столбец csv файла, но есть очень похожий скрипт где в csv не один столбец а несколько, соответственно можно сделать массив из каждой строки csv файла и использовать его. Следовательно, в новой задаче, я разделил один столбец csv файла на два:

    'Instituto de Cordoba','Esgueira'
    'La Union','Vitoria W'
    'Ferro','Olivais W'
    'Penarol','Gdessa Barreiro W'
    'Malaysia Dragons','Natacao W'
    'Singapore Slingers','Guifoes W'

    Соответственно в таком файле я могу строку превратить в массив из двух элементов и дальше их использовать как я сделал это в первом сообщении этой темы.

    Вот очень похожий скрипт и он работает:
    PHP:
    1. <?php
    2.     ini_set('display_errors', true);
    3.     error_reporting(-1);
    4.     $hostname = "localhost";
    5.     $username = "root";
    6.     $password = "xxxxxx";
    7.     $dbName = "scorechart";
    8.     $db = mysqli_connect("localhost", "root", "xxxxxx","scorechart");
    9.     $f = fopen("C:\Apache24\htdocs\Main2\No_In_DB_Insert_With_Check_Procedures_Insert_ID_RA\qwerty.csv", "r");
    10.  
    11.     mysqli_connect($hostname,$username,$password) OR DIE("Не могу создать соединение ");
    12.     $conect = mysqli_connect($hostname,$username,$password);
    13.  
    14.     mysqli_select_db($db,"scorechart") or die(mysqli_error());
    15.     mysqli_set_charset($db,'utf8');
    16.  
    17.     while (!feof($f))
    18.         {
    19.            $arrM = explode(",",fgets($f));
    20.               /* foreach ($arrM as $key => $value)
    21.                 {
    22.                     $arrM[$key] = iconv("windows-1251", "UTF-8",$value);
    23.                 }*/
    24.  
    25.             $query_select = "select * from `tgame` where `date` = $arrM[1]  and `teamh_rus` = $arrM[2] and `teama_rus` = $arrM[3] and `score_th` = $arrM[4] and `score_ta` = $arrM[5]";
    26.             //echo "<br>------------------<br>".$query_select."<br>------------------<br>";
    27.  
    28.             $result = mysqli_query($db,$query_select);
    29.  
    30.             //echo "<br>------------------<br>".mysqli_error()."<br>------------------<br>";
    31.  
    32.             $num_rows = mysqli_num_rows($result);
    33.             if($num_rows == 0)
    34.                 {
    35.                     echo "<br>------------------<br>".'$num_rows = '.$num_rows.'  Дубликаты не найдены, будет встаквка новой записи!'.$arrM[1].'-'.$arrM[2].'-'.$arrM[3]."<br>------------------<br>";
    36.                 }
    37.             else
    38.                 {
    39.                     echo "<br>------------------<br>".'$num_rows = '.$num_rows.'  Есть дубликаты, вствка новой записи не будет!'.$arrM[1].'-'.$arrM[2].'-'.$arrM[3]."<br>------------------<br>";
    40.                 }
    41.             if($num_rows == 0)
    42.             {
    43.                 $query_insert="insert into `tgame` (`fk_idtleague`, `date`, `teamh_rus`, `teama_rus`, `score_th`, `score_ta`, `sp5_th`, `sp5_ta`,`Comment1`,`Comment2`)
    44.                values
    45.                (
    46.                     $arrM[0],
    47.                     $arrM[1],
    48.                     $arrM[2],
    49.                     $arrM[3],
    50.                     $arrM[4],
    51.                     $arrM[5],
    52.                     $arrM[6],
    53.                     $arrM[7],
    54.                     $arrM[8],                
    55.                     $arrM[9]
    56.                )";
    57.                 //echo "<br>------------------<br>".$query_insert."<br>------------------<br>";
    58.                 mysqli_query($db,$query_insert);
    59.                 //echo "<br>------------------<br>".mysqli_error()."<br>------------------<br>";
    60.             }
    61.             /*for ($i = 0; $i <= 8; $i++)
    62.                   {
    63.                     echo $arrM[$i]." ";
    64.                 }
    65.             echo "<br/>***************************************************************************************************************";*/
    66.            }
    67.     fclose($f);
    68.     mysqli_close($db);
    69. ?>
    Для меня важен результат а как выглядит скрипт мне не важно, но я конечно же понимаю как он работает.
     
    #3 Methodman, 16 фев 2020
    Последнее редактирование: 16 фев 2020
  4. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    прикрепи сюда пожалуйста этот csv файл где один столбец
     
  5. Methodman

    Methodman Активный пользователь

    С нами с:
    30 апр 2018
    Сообщения:
    10
    Симпатии:
    0
     

    Вложения:

  6. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.745
    Симпатии:
    1.319
    Адрес:
    Лень
    PHP:
    1. <?php
    2.  
    3. require 'autoload.php';
    4.  
    5.  
    6. $db = new Aero\Database\Lerma( 'sqlite:db=testo.db', static function ( Archive\MouseZver\Config $config ): void
    7. {
    8.     $config -> ShemaStartingDriver -> sqlite = static function ( Aero\Database\Lerma $lrm, $config )
    9.     {
    10.         $lrm -> query( 'CREATE TABLE IF NOT EXISTS `table_test` (
    11.            `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
    12.            `name` TEXT NOT NULL,
    13.            `desc` TEXT NOT NULL
    14.        )' );
    15.    
    16.         $lrm -> query( 'INSERT INTO
    17.                `table_test`( `name`, `desc` )
    18.            VALUES
    19.            ( "Instituto de Cordoba", "text and text" ),
    20.            ( "Esgueira", "text and text" ),
    21.            ( "Ferro", "text and text" ),
    22.            ( "Instituto de Cordoba", "text and text" ),
    23.            ( "Ferro", "text and text" ),
    24.            ( "Ferro", "text and text" ),
    25.            ( "Penarol", "text and text" ),
    26.            ( "Singapore Slingers", "text and text" ),
    27.            ( "Singapore Slingers", "text and text" ),
    28.            ( "Instituto de Cordoba", "text and text" ),
    29.            ( "Penarol", "text and text" ),
    30.            ( "Ferro", "text and text" ),
    31.            ( "Singapore Slingers", "text and text" )
    32.        ' );
    33.     };
    34. } );
    35.  
    36. $names = file ( 'List_Eng_Teams_Column.csv', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES );
    37.  
    38. $lrm = $db -> query( [ 'SELECT `name`, COUNT(*) FROM `table_test` WHERE `name` IN( %s ) GROUP BY `name`', implode ( ', ', $names ) ] );
    39.  
    40. while ( [ $name, $count ] = $lrm -> fetch( Aero\Database\Lerma :: FETCH_NUM ) )
    41. {
    42.     printf ( 'Найден "%s" в количестве (%d)' . PHP_EOL, $name, $count );
    43. }
    PHP:
    1. Найден "Esgueira" в количестве (17)
    2. Найден "Ferro" в количестве (68)
    3. Найден "Instituto de Cordoba" в количестве (51)
    4. Найден "Penarol" в количестве (34)
    5. Найден "Singapore Slingers" в количестве (51)
     

    Вложения:

    • 83903.zip
      Размер файла:
      12,2 КБ
      Просмотров:
      1
    Methodman нравится это.
  7. Methodman

    Methodman Активный пользователь

    С нами с:
    30 апр 2018
    Сообщения:
    10
    Симпатии:
    0
    MouseZver, спасибо огромное за столь подробное решение. Но я пока не могу понять как это решение приспособить у себя.
     
  8. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.745
    Симпатии:
    1.319
    Адрес:
    Лень
    За спасибо есть кнопочка Up
     
  9. Methodman

    Methodman Активный пользователь

    С нами с:
    30 апр 2018
    Сообщения:
    10
    Симпатии:
    0
    Причина не работы скрипта была в том что название php скрипта было на русском языке.