Всем привет. Я редко обращаюсь в форум так как правило все ответы найти можно в гугл. Но в этот раз сколько не гуглил подходящего ответа не нашел. Задача следующая мне необходимо чтоб вовремя выборка из таблицы из одной бд сравнить данные таблицы из другого бд. То есть, в одной бд в таблице имеется поле users в другой бд в таблице поле Login. При этом при чтении данных таблицы 1 необходимо сравнить в цикле совпадают ли значения Login с users. PHP: <?php $bd1=mysql_connect("localhost","root",""); $bd2=mysql_connect("localhost","root",""); mysql_select_db("base2", $bd1); mysql_select_db("base", $bd2); $r1=mysql_query("select*from `table1`",$bd1); while(t1=mysql_fetch_array($r1)){ $r2=mysql_query("select*from `table2`",$bd2); while(mysql_fetch_array($r2)){ if ($t1['users']==$t2['login']){print 'есть совпадение';} } } ?> Что не так, подскажите, или дайте направление. Заранее спасибо!
PHP: mixed mysql_query ( string $query [, resource $link_identifier = NULL ] ) http://www.php.net/mysql_query
спасибо за ответ. Я все таки решил задачу переключением между базами с помощью 4го параметра "true". А данные с поля users присвоил переменной. Может и неправильно это но пока лучше идеи нет в голове. Если есть лучше предложение, хотелось бы услышать. PHP: $bd1 = mysql_connect("localhost","root","",true); mysql_select_db("base2", $bd1); $r1=mysql_query("select*from `table1`",$bd1); while($t1=mysql_fetch_array($r1)){ $data1=$t1['users']; $bd2 = mysql_connect("localhost","root","",true); mysql_select_db("base", $bd2); $r2=mysql_query("select*from `table2`",$bd2); while(mysql_fetch_array($r2)){ if ($data1==$t2['login']){print 'есть совпадение';} } $bd1 = mysql_connect("localhost","root","",true); mysql_select_db("base2", $bd1); }
Чет если честно жесть какая-то. Ты во вторую базу будешь слать запросы, количество которых будет равно количеству записей возвращенных первым запросом. И каждый раз будешь получать в ответ один и тот-же массив. Я вижу два пути, оба без переключения баз: 1) Выполнил первый запрос, результат засунул в массив. Затем пробегая по этому массиву шли запрос во вторую базу используя WHERE, и получая непустой результат пиши 'есть совпадение'. 2) Выполнил первый запрос, результат засунул в массив. Выполнил второй запрос, результат засунул в массив. /*Пробежал,*/ сравнил два массива, где нужно написал 'есть совпадение'.
Спасибо за ответ, я думал о таком варианте. Сразу встал вопрос в другом, имеет ли смысл дополнительного цикла?
Наверное так будет лучше, всего один запрос вида Код (Text): SELECT t1.*, t2.* FROM database1.table1 AS t1 INNER JOIN database2.table2 AS t2 ON t2.field1 = t1.field1 В твоём случае запрос: Код (Text): SELECT t1.*, t2.* FROM base.table2 AS t1 INNER JOIN base2.table1 AS t2 ON t2.user = t1.login
Ну если честно уже на этом этапе в base.table2, base2.table1 можно запутаться, и зачем две базы? Может вернуться в начало и перепроэктировать базу данных пока не поздно, назвать нормально таблицы и т.д.
если бы это было бы на первоначальном этапе то да. Но это задача чисто для интеграции уже действующих систем. В целом там код куда шире, а код который предоставил для отображении проблемы (чтобы не забивать пост лишним листингом), которая встала передомной. касательно решения Код (Text): SELECT t1.*, t2.* FROM base.table2 AS t1 INNER JOIN base2.table1 AS t2 ON t2.user = t1.login как попробую отпишусь, спасибо за помощь