Мога ли да вземам информация от 2 датабази ?

sianbg_s

Registered
Здравейте. Искам да ви попитам мога ли да вземам информация от 2 различни датабази. В смисъл имам форум и сайт с различни датабази. В форума съм се свързал с датабазата forum а в сайта в датабазата sait. Мога ли в форума по някакъв начин да вземам информация от датабазата сайт ?
 
Здравей!

Знам, че отговора ми няма да ти хареса, но по-добре намери начин да събереш 2-те БД. Ползвал съм 2 БД намиращи се на 2 различни сървъра и мога да ти гарантирам, че създава само проблеми.

Виж тази тема:
http://www.web-tourist.net/forum/viewtopic.php?t=40120&start=0&postdays=0&postorder=asc&highlight=mysqlpconnect
 
sizif каза:
Ползвал съм 2 БД намиращи се на 2 различни сървъра и мога да ти гарантирам, че създава само проблеми.

Здрасти

Ще дадеш ли повече информация, че ми стана любопитно :)

Поздрави
 
Значи сваляш си базата на сайта на тхт файл примерно и после го импортваш в базата на форума :).
 
vik96 каза:
Значи сваляш си базата на сайта на тхт файл примерно и после го импортваш в базата на форума :).



Или с 2 думи правиш от 2те ДБта 1но
 
Slavei каза:
Здрасти

Ще дадеш ли повече информация, че ми стана любопитно :)

Поздрави

Здравей, Slavei!

Както винаги радвам се да те видя :)


Свързване:

1) Налага се на сървъра, на който е едната БД да се разреши връзка към сървъра на който работи скрипта (и другата БД). В с-панел-а има меню "Отдалечем MySQL сървър" - от там се добавя домейна или Ип-то на сървъра.

2) Проверява се (най-добре да се пише на хостинг-доставчика) на кой адрес и порт слуша MySQL-сървъра. В моя случай не работеше на обичайния порт 3306.

Връзката после е стандартна:
$vryzka_1=mysql_connect ("сървър: порт", "юзър", "парола");

Първото ми разочарование дойде от това, че не можех да отворя постоянна връзка с mysql_pconnect(); - ставаше дума за споделен сървър и трябваше да се очаква.

Отваряне на връзката в скрипта:

$vryzka_1=mysql_connect ("локалхост", "юзър", "парола");
$bd_1=mysql_select_db ("име_на_БД_1", $vryzka_1);

същото и за втората БД:

$vryzka_2=mysql_connect ("сървър: порт", "юзър", "парола");
$bd_2=mysql_select_db ("име_на_БД_2", $vryzka_2);

После стойностите на $bd_1 и $bd_2 са идентификатори при изпълнение на заявката:

mysql_query("заявка", $bd_1);

Затварянето става с другия идентификатор, този от конекта - $vryzka_1 и $vryzka_2:

mysql_close ($vryzka_1);
mysql_close ($vryzka_2);

макар че и да не се затвори не е фатално, а в моя случай връзката към едната БД увяхваше по време на изпълнението съвсем сама :))


***

В ИТ-плейс ми бяха обснявали как могат да се слекетират таблици от 2-те бД в релация (БД се отбелязват в самата заявка), но аз не успях да го направя, а в момента не си намирам работните скриптове, за да илюстрирам.

Струва си човек да пробва веднъж, колкото да задоволи любопитството си, но не смятам, че е удачно да се работи с 2 БД (особено за малък прокет), колкото и в даден случай да изглежда, че няма алтернативи.
 
Здрасти
Ясно.
Аз като си правих първия сайт ми се наложи да вадя някакво инфо от базата на брояча. Ама се омешаха конекциите.
Сега като ти видях примера мисля, че разбрах защо. Тогава за идентификатор на заявката май задавах $vryzka_Х :)) вместо $db_x

А това което са ти обяснявали от ит-плейса мога да ти го кажа, ако ти трябва.

Поздрави
 
може и е елементарно :)


Имаш 2 бази

baza1, baza2 с таблици в тях table1, table2

Ето и номера

mysql_connect(.........); //връзка в mysql
игнорираш
mysql_select_db
просто не го ползваш :)

и сега имаш

SELECT * FROM `baza1`.`table1` WHERE .... //така взимаш данните от table1 която е в база1

SELECT * FROM `baza2`.`table2` //така взимаш данните от база2 и таблица 2
 
Не знам на кой обясняваш, но Сизиф мисля, че имаше в предвид с една заявка да се вадят данни от двете таблици.
Или поне аз под релация разбрах 'едно към едно', едно към много и тн..

Нещо такова, ако се ползват твоите примери:
(в примера релация едно към едно)

SELECT *
FROM `baza1`.`table1`, `baza2`.`table2`
WHERE `baza1`.`table1`.`id` = `baza2`.`table2`.`id`
 
може и така

SELECT * FROM `baza1`.`table1` LEFT JOIN `baza2`.`table2` ON (`baza1`.`table1`.`id` = `baza2`.`table2`.`ids`)
 
@Jooorooo е са... :) като са ти различни имената на колонките то може и да не се задава изрично база и таблица :wink:

purko каза:
Ам малко извън темата...
Ами ако са на различни сървъри?

Сизиф е дал пример когато базите се намират физически на различни машини. (Разликата е само в това, че вместо локалхост се задава ИП. Евентуално и порт, ако не е дефолтния. А и трябва да имаш разрешение да се конектнеш отвън към базата - обикновенно е забранено)
 

Горе