Lütfen açıklama okuduktan sonra, ben aslında iki ayrı MySQL sunucu örnekleri ikamet tabloları sorgulamak istediğiniz izlenimi altında değilim. En azından, açıklama metni:
Foreign_db.login, kullanıcı SELECT foreign_db.login.username, ad, soyad nerede
en az iki kullanıcı (olan veya aynı mysql sunucu örneği üzerinde ikamet olmayabilir) olarak giriş olurken, bir sorgu çalıştırmak istiyorum önerir.
Sorunuza, size iki farklı veritabanlarındaki verileri sorgulamak istedim, ama bir MySQL örneği pek çok veritabanları olabilir gerçekleştirmek için önemli olduğunu söyledi. Aynı mysql örneği tarafından yönetilen çoklu veritabanları için, sadece çalışır bağlı söz önerilen çözüm: Sadece bir nokta ile veritabanı ve tablo adları ayıran, veritabanlarının adı ile tablo adı öneki: <db-name>.<table-name>
.
I işaret gibi Ama, bu sadece çalışır:
- Bir sorguda erişen tüm veritabanları aynı sunucu üzerinde - yani, aynı MySQL örneği tarafından yönetilmektedir
- veritabanına bağlı kullanıcı hem tabloları erişmek için doğru ayrıcalıklara sahip.
Scenario1: databases on same host: grant appopriate privileges and qualify table names
So if the tables actually reside on the same mysql instance, there is no need for a second login or connection - simply grant the database user you use to connect to the datbase the appropriate privileges to select from all tables you need. You can do that with the GRANT
syntax, documented here: http://dev.mysql.com/doc/refman/5.1/en/grant.html
For example, GRANT SELECT ON sakila.film TO 'test'@'%'
will allow the user test@%
to select data from the film
table in the sakila
database. After doing that, said user can refer to this table using sakila.film
(so-called qualified table name), or if the current database is set to sakila
, simply as film
Scenario2: databases managed by different MySQL instances: FEDERATED engine
If the tables you want to access are actually managed by two different MySQL instances, there is one trick that may or may not work, depending on your configuration. Since MySQL 5.0 mysql supports the FEDERATED
storage engine. This lets you create a table that is not actually a table, but a peephole to a table on a remote server. This engine is documented here: http://dev.mysql.com/doc/refman/5.1/en/federated-storage-engine.html
Bildiğiniz Örneğin, uzak ana misc
veritabanında bu tablo var:
CREATE TABLE t (
id int not null primary key
, name varchar(10) not null unique
)
Bu kullanarak bu uzak tablo yerel bir 'işaretçi' yapabilirsiniz:
CREATE TABLE t (
id int not null primary key
, name varchar(10) not null unique
)
ENGINE = FEDERATED
CONNECTION='mysql://<user>@<remote-server>:<remote-port>/misc/t';
Ne yazık ki, FEDERATED
motor her zaman mevcut değildir, bu yüzden sen bile kullanabilirsiniz eğer ilk kontrol etmelisiniz. Ama o zaman sadece sadece başka bir tablo gibi, sorgularda yerel tablo t kullanabilirsiniz ve MySQL uzak sunucu ile iletişim ve diğer tarafta fiziksel masaya uygun işlemleri, öyle varsayalım.
İhtar: FEDERE tabloları ile birkaç optimizasyon sorunları vardır. Bu sizin için geçerli olmadığını ve ne dereceye kadar öğrenmek gerekir. Örneğin, bir federasyon tabloya WHERE
uygulayarak birçok durumda gerçek filtreleme appplied olacak yerel sunucu, tel üzerinden pullled olan tüm tablo içeriğini neden olabilir. Başka bir sorun tablo oluşturma ile: Eğer federe masa ve tablo tanımları o MOTOR maddesinin (ve BAĞLANTILI) hariç, exacty maç işaret ettiğini çok emin olmak zorunda. Örneğin, farklı bir karakter kümesi varsa, veri tel üzerinde seyahat sonra tamamen bozuk gelebilir.
Eğer bu makaleyi okumak yok, FEDERATED
tabloları kullanmak istiyorsanız http://oreilly.com/pub/a/databases/2006/08/10/mysql-federated-tables.html karar eğer belirli kullanım durumda onun sağ.
If you think you do need it, I have a utility to create federated tables here: http://forge.mysql.com/tools/tool.php?id=54
Scenario3: can't use FEDERATED, but tables on different MySQL instances
Finally, if you have tables on different MySQL instances, but cannot for some reason use the federated table engine, your a out of luck I'm afraid. You are simply going to have to execute queries to both MySQL instances, receive the results and do something intelligent with it in PHP. depending on your exact requirements, this may be a perfectly viable solution
Kendine senin sorunun, benim cevap parçası iyi temyiz için karar, ve daha fazla yardıma ihtiyacınız olursa bir yorum eklemek gerekiyor sanırım. TIA Roland.