Autor Zpráva
Soob
Profil *
Chci se zeptat jak spojit 2 databázové tabulky ze dvou různých databází.
Když realizuji připojení ke dvoum databázím zvlášť, tak to dělám takto a je to funkční:

    if (!$con2=mysql_connect("url", "databaze1", "heslo","databaze1",true)){ echo "Nelze se pripojit"; exit; }
    if (!mysql_select_db("databaze1",$con1)) { echo "Nelze se pripojit k databazi<br />".mysql_error(); exit; }
    if (!$con=mysql_connect("url", "databaze2", "heslo","databaze2",true)){ echo "Nelze se pripojit"; exit; }
    if (!mysql_select_db("databaze2",$con2)) { echo "Nelze se pripojit k databazi<br />".mysql_error(); exit; }
dále pak vložím dotaz:
$query = mysql_query("SELECT * FROM databaze1.aktuality",$con1);
$rad1=mysql_fetch_array($query,MYSQL_ASSOC));

$query = mysql_query("SELECT * FROM databaze2.aktuality",$con2);
$rad2=mysql_fetch_array($query,MYSQL_ASSOC));

Jak vytvořit z těchto dvou dotazů pouze jeden? Je to vůbec možné na úrovni MySQL?
juriad
Profil
Zkus, jestli bude fungovat:
SELECT * FROM databaze1.aktuality UNION ALL SELECT * FROM databaze2.aktuality
Mimochodem, jaký je důvod mít data oddělená ve dvou různých databázích?
Soob
Profil *
Potřebuju spojit 2 databáze různých webů, aby se na jednom z nich mohl vypsat souhrný přehled aktualit.
Můj dotaz, už sekce napovídá, se týká spíš realizace v PHP, protože za dotazem ve funkci mysql_query uvádím o jaké spojení se jedná: viz. $con1 a $con2. Ve chvíli kdy dotaz spojím, nevím co použít za spojení....
juriad
Profil
Ty se ve skutečnosti nepřipojuješ k databazi, ale k databázovému serveru. A pokud jsou databáze ve stejném databázovém serveru, můžeš jedním dotazem přistupovat do více databází.
Ten čtvrtý parametr u mysql_connect říká, která databáze je výchozí (vybraná), což slouží jen pro zjednodušení dotazování, abys nemusel u každé tabulky uvádět, z jaké je databáze. Trochu se mi to nelíbí, protože funkce mysql_connect takový parametr nemá, ale nejspíš jde jen o chybu v ukázce.
Pokud chceš přistoupit k tabulce z jiné databáze, mělo by stačit jen uvést kvalifikovaný název tabulky (databaze1.aktuality). Mělo by být jedno, které připojení použiješ.
Soob
Profil *
Ještě jednou uvedu přesně jak to mám:
if (!$con1=mysql_connect("uvdb18.active24.cz", "user1", "heslo1")){ echo "Nelze se pripojit"; exit; }
if (!$con2=mysql_connect("uvdb18.active24.cz", "user2", "heslo2")){ echo "Nelze se pripojit"; exit; }

$query = mysql_query("SELECT * FROM databaze1.aktuality",$con1);
$rad1=mysql_fetch_array($query,MYSQL_ASSOC));
 
$query = mysql_query("SELECT * FROM databaze2.aktuality",$con2);
$rad2=mysql_fetch_array($query,MYSQL_ASSOC));
1.) Když nechám proměnnou s připojením $con1 a $con2 v mysql_query, tak fungují oba dotazy.
2.) Když proměnné $con1 a $con2 odstraním tak data z db vypíše pouze příkaz 2.

Chová se to tak, že v případě že neuvedu v mysql_query proměnnou s připojením $con1 nebo $con2, tak automaticky hledá jen v databázi, ke které se naposledy připojilo.
Jinak server by měl být stejný, jestli to dobře chápu a pouze se připojuji pod jiným účtem a k jiné databázi.
juriad
Profil
Soob:
Aha, v [#1] jsi nic o různých uživatelích nenaznačil, shoda v heslu tomu nenasvědčovala. V tom případě to opravdu takto jednoduše nejde.
Ale mohlo by fungovat vytvoření federated tabulky. Tedy vytvořit lokální kopii (jen schéma) a nastavit jí connection do druhé databáze. Pak již budou obě tabulky dostupné v jedné databázi.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: