我有非常大的数据库, 每个用户包含10个数据库 只有一个名为index的表。
SELECT * FROM db1,db2,db3,db4,db5,db6 WHERE db1.index.user_id,db2.index.user_id,db3.index.user_id = db4.index.user_id,db5.index.user_id,db6。 index.user_id ORDER BY db1.index.name,db2.index.name,db3.index.name
是否有办法制作此代码?
用户数据库中的表索引:
database1
user_id | name | country
.....................................
198 |User1 | egypt
database2
user_id | name | country
.....................................
236 |User2 | uk
database3
user_id | name | country
.....................................
385 |User3 | usa
以及另外3个状态更新数据库。
状态更新数据库中的表索引:
database4
user_id | status_update | date
.....................................
198 |xxxxx | 2011-08-24 13:00
198 |xxxxxxx | 2011-08-24 10:33
236 |xxxxxxx | 2011-08-24 06:33
database5
user_id | status_update | date
.....................................
198 |xxxxx | 2011-08-24 15:01
385 |xxxxxxx | 2011-08-24 10:33
305 |xxxxx | 2011-08-24 12:11
database6
user_id | status_update | date
.....................................
400 |xxxxxxx | 2011-08-24 10:39
236 |xxxxx | 2011-08-24 09:00
981 |xxxxxxx | 2011-08-23 22:54
我想从用户数据库和状态更新数据库中进行选择 用户数据库和状态更新数据库之间的共同或公共user_id(用户)。
SELECT * FROM db1,db2,db3,db4,db5,db6 WHERE db1.index.user_id,db2.index.user_id,db3.index.user_id = db4.index.user_id,db5.index.user_id,db6。 index.user_id ORDER BY db1.index.name,db2.index.name,db3.index.name
是否有办法制作此代码?
答案 0 :(得分:0)
<?php
$hostname = 'yourHostname';
$username = 'yourUsername';
$password = 'yourPassword';
$databases = array('database1', 'database2', 'database3', ...);
// connect to all databases and select db
$firstConnect = true;
$links = array();
foreach ($databases as $database) {
$links[$database] = mysql_connect($hostname, $username, $password, !$firstConnect);
$firstConnect = false;
mysql_select_db($database, $links[$database]);
}
// select from all databases
$users = array();
foreach ($databases as $database) {
$result = mysql_query('select * from index', $links[$database]);
while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
$users[] = $row;
}
}
$statusDatabases = array('status_update_db1', 'status_update_db2', 'status_update_db3', ...);
// same steps as above
// get status_update records in $statusUpdates
// do some mix and match betwen $users and $statusUpdates
必须有更好的方法
编辑:如果您的数据库是9GB,这将需要永远,这不是一个可行的解决方案
答案 1 :(得分:0)
这可能会为3个数据库实现您想要的东西。您可以按照查询模式加入3个以上的数据库。
SELECT * FROM database1.index LEFT JOIN database2.index ON database1.index.user_id=database2.index.user_id LEFT JOIN database3.index ON database1.index.user_id=database3.index.user_id;