选择20个mysql数据库之间的相互行

时间:2011-08-23 18:06:42

标签: mysql

我有非常大的数据库, 每个用户包含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

是否有办法制作此代码?

2 个答案:

答案 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;