За последние 24 часа нас посетили 18025 программистов и 1650 роботов. Сейчас ищут 1685 программистов ...

Работа с двумя БД Mysql Php

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

  1. Kazprof

    Kazprof Новичок

    С нами с:
    19 фев 2018
    Сообщения:
    4
    Симпатии:
    0
    Всем привет. Я редко обращаюсь в форум так как правило все ответы найти можно в гугл. Но в этот раз сколько не гуглил подходящего ответа не нашел. Задача следующая мне необходимо чтоб вовремя выборка из таблицы из одной бд сравнить данные таблицы из другого бд. То есть, в одной бд в таблице имеется поле users в другой бд в таблице поле Login. При этом при чтении данных таблицы 1 необходимо сравнить в цикле совпадают ли значения Login с users.

    PHP:
    1. <?php
    2. $bd1=mysql_connect("localhost","root","");
    3. $bd2=mysql_connect("localhost","root","");
    4. mysql_select_db("base2", $bd1);
    5. mysql_select_db("base", $bd2);
    6.  
    7. $r1=mysql_query("select*from `table1`",$bd1);
    8. while(t1=mysql_fetch_array($r1)){
    9.     $r2=mysql_query("select*from `table2`",$bd2);
    10.       while(mysql_fetch_array($r2)){
    11.         if ($t1['users']==$t2['login']){print 'есть совпадение';}
    12.      }
    13. }
    14. ?>
    Что не так, подскажите, или дайте направление. Заранее спасибо!
     
    #1 Kazprof, 19 фев 2018
    Последнее редактирование: 19 фев 2018
  2. SProx

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

    С нами с:
    5 сен 2016
    Сообщения:
    34
    Симпатии:
    6
    PHP:
    1. mixed mysql_query ( string $query [, resource $link_identifier = NULL ] )
    http://www.php.net/mysql_query
     
  3. Kazprof

    Kazprof Новичок

    С нами с:
    19 фев 2018
    Сообщения:
    4
    Симпатии:
    0
    спасибо за ответ. Я все таки решил задачу переключением между базами с помощью 4го параметра "true". А данные с поля users присвоил переменной. Может и неправильно это но пока лучше идеи нет в голове. Если есть лучше предложение, хотелось бы услышать.

    PHP:
    1. $bd1 = mysql_connect("localhost","root","",true);
    2. mysql_select_db("base2", $bd1);
    3.  
    4. $r1=mysql_query("select*from `table1`",$bd1);
    5.      while($t1=mysql_fetch_array($r1)){
    6.             $data1=$t1['users'];
    7.  
    8.           $bd2 = mysql_connect("localhost","root","",true);
    9.            mysql_select_db("base", $bd2);
    10.             $r2=mysql_query("select*from `table2`",$bd2);
    11.                  while(mysql_fetch_array($r2)){
    12.                      if ($data1==$t2['login']){print 'есть совпадение';}
    13.                 }
    14.              $bd1 = mysql_connect("localhost","root","",true);
    15.              mysql_select_db("base2", $bd1);
    16. }
     
  4. MRSgiba

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

    С нами с:
    22 дек 2017
    Сообщения:
    200
    Симпатии:
    32
    Чет если честно жесть какая-то. Ты во вторую базу будешь слать запросы, количество которых будет равно количеству записей возвращенных первым запросом. И каждый раз будешь получать в ответ один и тот-же массив.
    Я вижу два пути, оба без переключения баз:
    1) Выполнил первый запрос, результат засунул в массив. Затем пробегая по этому массиву шли запрос во вторую базу используя WHERE, и получая непустой результат пиши 'есть совпадение'.
    2) Выполнил первый запрос, результат засунул в массив. Выполнил второй запрос, результат засунул в массив. /*Пробежал,*/ сравнил два массива, где нужно написал 'есть совпадение'.
     
    #4 MRSgiba, 20 фев 2018
    Последнее редактирование: 20 фев 2018
    Dimon2x нравится это.
  5. Kazprof

    Kazprof Новичок

    С нами с:
    19 фев 2018
    Сообщения:
    4
    Симпатии:
    0
    Спасибо за ответ, я думал о таком варианте. Сразу встал вопрос в другом, имеет ли смысл дополнительного цикла?
     
  6. MRSgiba

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

    С нами с:
    22 дек 2017
    Сообщения:
    200
    Симпатии:
    32
    Наверное так будет лучше, всего один запрос вида

    Код (Text):
    1. SELECT t1.*, t2.*
    2. FROM database1.table1 AS t1
    3. INNER JOIN database2.table2
    4. AS t2 ON t2.field1 = t1.field1
    В твоём случае запрос:
    Код (Text):
    1. SELECT t1.*, t2.* FROM base.table2 AS t1 INNER JOIN base2.table1 AS t2 ON t2.user = t1.login
     
    #6 MRSgiba, 21 фев 2018
    Последнее редактирование: 21 фев 2018
  7. MRSgiba

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

    С нами с:
    22 дек 2017
    Сообщения:
    200
    Симпатии:
    32
    Ну если честно уже на этом этапе в base.table2, base2.table1 можно запутаться, и зачем две базы? Может вернуться в начало и перепроэктировать базу данных пока не поздно, назвать нормально таблицы и т.д.
     
  8. Kazprof

    Kazprof Новичок

    С нами с:
    19 фев 2018
    Сообщения:
    4
    Симпатии:
    0
    если бы это было бы на первоначальном этапе то да. Но это задача чисто для интеграции уже действующих систем. В целом там код куда шире, а код который предоставил для отображении проблемы (чтобы не забивать пост лишним листингом), которая встала передомной.

    касательно решения
    Код (Text):
    1. SELECT t1.*, t2.* FROM base.table2 AS t1 INNER JOIN base2.table1 AS t2 ON t2.user = t1.login
    как попробую отпишусь, спасибо за помощь