【问题标题】:Selecting mutual rows between 20 mysql databases选择 20 个 mysql 数据库之间的相互行
【发布时间】:2011-08-23 18:06:41
【问题描述】:

我有非常大的数据库, 10 个用户数据库,每个数据库包含 只有一个表称为索引。

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 按 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

有没有办法制作这段代码???

【问题讨论】:

  • 您应该考虑重新设计您的数据库并将所有数据迁移到一个唯一的数据库中

标签: mysql


【解决方案1】:

这可能会完成您对 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;

【讨论】:

  • 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】:
<?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,这将需要很长时间,这不是一个可行的解决方案

【讨论】:

  • 完全重新设计的更好方法。您不应该需要 PHP 来区分十几个数据库。如果它们显然包含相关数据,那么您根本就不应该拥有十几个数据库。
  • 我知道,但我有十几个处理相关数据的数据库,因为如果我只有一个数据库供用户使用,例如它会非常大,可能会超过(9 GB),这使得即使我使用索引,查询也非常非常慢,所以我将用户划分到多个数据库中。
猜你喜欢
  • 1970-01-01
  • 2012-01-17
  • 1970-01-01
  • 1970-01-01
  • 2015-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多